Кто-нибудь может сказать мне, почему он возвращает 0? У меня есть Ввод:
5 2
1 0 1 1 0
И 2 запроса 1 X чтобы перевернуть X-й бит в массиве:
1 2 (результат {1 1 1 1 0})
0 LR , чтобы взять подмассив и преобразовать его в десятичное число:
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 ++, поэтому, пожалуйста, не будьте строгими;)