二进制数相加问题

ghc19920312 2011-08-04 04:17:31
本人初学C++。
问题如下:数组A、B分别存放n位二进制数,现在要将a+b的二进制数存入一个n+1位的数组。
以下是我写的程序,麻烦大家帮我看看问题出在哪。
#include <iostream>
#include "math.h"
using namespace std;
int main()
{
int i,n,a[100],b[100],c[100]={0};
int sum_a=0,sum_b=0,sum_c=0;
cout<<"请输入二进制数的位数n:"<<endl;
cin>>n;
cout<<"请输入二进制数a(以数组的形式:)"<<endl;
for (i=0;i<=n-1;i++)
{
cin>>a[i];
sum_a=sum_a+a[i]*pow(2,n-1-i);
}
cout<<"请输入二进制数b(以数组的形式:)"<<endl;
for (i=0;i<=n-1;i++)
{
cin>>b[i];
sum_b=sum_b+b[i]*pow(2,n-1-i);
}
cout<<"二进制数a对应的十进制数为:"<<sum_a<<endl;
cout<<"二进制数b对应的十进制数为:"<<sum_b<<endl;
for (i=n;i>=0;i--)
{
if (a[i-1]+b[i-1]+c[i]<=1)
{
c[i]=a[i-1]+b[i-1]+c[i];
}
else
{
c[i]=a[i-1]+b[i-1]+c[i]-2;
c[i-1]=c[i-1]+1;
}
}
cout<<"a+b得到的二进制数为:"<<endl;
for (i=0;i<=n;i++)
{
cout<<c[i];
}
for (i=0;i<=n;i++)
{
cin>>c[i];
sum_c=sum_c+c[i]*pow(2,n-i);
}
cout<<"二进制数c对应的十进制数为:"<<sum_c<<endl;
return 0;
}
...全文
332 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ppyyjj 2012-03-21
  • 打赏
  • 举报
回复
打错啦
应该是 :当i=0时,数组a的下标为-1,溢出了
ppyyjj 2012-03-21
  • 打赏
  • 举报
回复
........

for (i=n;i>=0;i--)
{
if (a[i-1]+b[i-1]+c[i]<=1)
.......

上面这段 当i=0时,数组a的下标为0,溢出了
赵4老师 2011-08-04
  • 打赏
  • 举报
回复
单步调试和设断点调试是程序员必须掌握的技能之一。
ghc19920312 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 luciferisnotsatan 的回复:]

引用 1 楼 healer_kx 的回复:

不如转成10进制的int,然后相加,再转成2进制了。

++
[/Quote]
我试试
luciferisnotsatan 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 healer_kx 的回复:]

不如转成10进制的int,然后相加,再转成2进制了。
[/Quote]
++
ghc19920312 2011-08-04
  • 打赏
  • 举报
回复
如果我想直接二进制相加应该怎么写?我的想法是先构造一个n+1位数组,从最后一位开始加,采用二进制加法的规则,但是我不知道程序错在哪里了,请指点
healer_kx 2011-08-04
  • 打赏
  • 举报
回复
不如转成10进制的int,然后相加,再转成2进制了。

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧