c++ - 为什么 bin_to_dec() 返回 0?
问题描述
谁能告诉我为什么它返回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++ 的初学者,所以请不要严格;)
解决方案
你犯了很多错误......数组从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;
}
推荐阅读
- google-sheets - 使工作表在指定单元格中输入行号
- laravel - 我最近在我的 laravel 项目中使用了 JCrop,但是虽然我选择了一张照片并加载了它,但我得到了验证错误 image is requred
- material-ui - const primary = red[500]; 之间有什么不同?// #F44336 const 重音 = red['A200']; // #F44336?
- laravel - 带有 laravel 框架的推荐系统
- git - Git LFS - 如何从 git 存储库中删除旧版本的文件?
- algorithm - 给定点的坐标,找出存在于彼此一定距离内的所有点对?
- java - 类路径资源 [aa.xlsx] 无法解析为绝对文件路径,因为它不驻留在文件系统中
- laravel-5 - Laravel 5 中的 Distinct 无法正常工作
- javascript - 谷歌地图到 OpenLayers - 标记点击监听器等效
- c++ - 如何调试由于 shared_ptr 形成的循环引用?