您的位置:首页 > 其它

计蒜客 二进制加法

2016-06-12 21:17 162 查看
给定两个二进制数组成的字符串,计算他们的和。

他们的和依然是字符串。

例如:

a = “11”

b = “1”

返回”100”.

注意:千万别想着将二进制转换成10进制,计算以后再转换成二进制。

那样,在大数的时候,肯定溢出哦~

格式:

第一行输入两个长度不超过100的二进制字符串,中间以空格间隔开。

接下来输出两个二进制数的和。

样例输入

1010 1011

样例输出

10101

#include <iostream>
#include <cmath>
#include <cstring>
#include <stdio.h>
#include <algorithm>
#include <iomanip>
using namespace std;
int main()
{
char a[1000],b[1000];
while(cin>>a>>b)
{
int x=strlen(a);
int y=strlen(b);
char c[3005];

memset(c,'0',sizeof(c));
x--;
y--;
char z='0';
int k=3000;
for(;;)
{

if(a[x]=='0'&&b[y]=='0')       //首先是各种情况判断
{
if(z=='1') {c[k]='1';z='0';}
else c[k]='0';
}

if(a[x]=='1'&&b[y]=='1')
{
if(z=='1') c[k]='1';
else {c[k]='0';z='1';}

}
if(a[x]=='1'&&b[y]=='0')
{
if(z=='1') c[k]='0';
else c[k]='1';

}
if(a[x]=='0'&&b[y]=='1')
{
if(z=='1') c[k]='0';
else c[k]='1';

}

k--;
x--;
y--;
if(x==-1&&y==-1) break;      //两个字符串都读到头就结束

if(x==-1) {x=0;a[x]='0';}   //针对一个字符串到头另外一个还有剩余的处理
if(y==-1){y=0;b[y]='0';}

}
int i=0;
if(z=='1') c[k]='1';
while(c[i]=='0'&&i<3000) i++;      //i<3000 是对结果只有0的处理
for(;i<=3000;i++)
{
cout<<c[i];
}
cout<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: