计蒜客 二进制加法

时间:2022-10-03 20:59:58

给定两个二进制数组成的字符串,计算他们的和。

他们的和依然是字符串。

例如:

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;
    }
}