给定两个二进制数组成的字符串,计算他们的和。
他们的和依然是字符串。
例如:
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;
}
}