有人可以告诉我为什么它返回0吗?我有输入:
5 2
1 0 1 1 0
和2个查询1 X翻转数组中的第X位:
1 2(结果{1 1 1 1 0})
0 L R接受一个子数组并将其转换为Decimal:
0 1 4(这里需要{1,1,1,1})
在这种情况下,它应该打印15。但是这个打印只是零?
我的代码:
#include <iostream>
using namespace std;
const int maxn = 1e6 +500;
char a[maxn];
//That's function which I'm stuck with
long bin_to_dec(char *s)
{
short i;
long res = 0;
for (i = 0;i<sizeof(long)*8 && s[i];++i)
{
res<<=1;
res |=(s[i]-'0');
}
return res;
}
//This function responsible for queries
//Arguments which it takes : vid - type of query,int inx - first parameter,inx1 - 2nd parameter
int zapros(int vid,int inx,int inx1 = 0)
{
string s = "";
if (vid == 1)
{
a[inx] +=1;
}
else
{
int c = 1;
char ch[inx1+1];
for (int k = inx;k<=inx1;k++)
{
ch[c] = a[k];
c++;
}
cout<<bin_to_dec(ch);
/*
for (int k = inx;k<=inx1;k++)
{
s+=a[k];
}*/
}
}
int main()
{
int n,q;
int vid,inx,inx1;
cin>>n>>q;
for (int i =1;i<=n;i++)
{
cin>>a[i];
}
for (int j =1;j<=q;j++)
{
cin>>vid;
if (vid == 1)
{
cin>>inx;
zapros(vid,inx);
}
else
{
cin>>inx>>inx1;
zapros(vid,inx,inx1);
}
}
return 0;
}
我是C ++的初学者,所以请不要太严格;)
您犯了很多错误...数组从0开始,而不是从1开始。为什么使用char数组?我已更正错误,并使用标准转换(https://www.electronics-tutorials.ws/binary/bin_2.html)将二进制更改为int函数。创建ch数组时,您无法编写“ char ch [expression]”,因此已被禁止。您必须使用指针。
#include <iostream>
#include <cmath>
using namespace std;
const int maxn = 1e6 +500;
int a[maxn];
//That's function which I'm stuck with
long bin_to_dec(int s[],int n)
{
long res = 0;
int cont=0;
for (int i = n-1;i>=0;i--)
{
res+=s[i]*pow(2,cont);
cont++;
}
return res;
}
//This function responsible for queries
//Arguments which it takes : vid - type of query,int inx - first parameter,inx1 - 2nd parameter
int zapros(int vid,int inx,int inx1 = 0)
{
string s = "";
if (vid == 1)
{
if(a[inx]==1)
a[inx]=0;
else
a[inx]=1;
}
else
{
int cont = 0;
int *ch;
ch=new int[inx1];
for (int k = inx;k<inx+inx1;k++)
{
ch[cont] = a[k];
cont++;
}
cout<<bin_to_dec(ch,inx1)<<endl;
/*
for (int k = inx;k<=inx1;k++)
{
s+=a[k];
}*/
delete[] ch;
}
}
int main()
{
// cout<<maxn<<endl;
int n,q;
int vid,inx,inx1;
cin>>n>>q;
for (int i =0;i<n;i++)
{
cin>>a[i];
}
for (int j =0;j<q;j++)
{
cin>>vid;
if (vid == 1)
{
cin>>inx;
zapros(vid,inx);
}
else
{
cin>>inx>>inx1;
zapros(vid,inx,inx1);
}
}
return 0;
}