Add Binary

Given two binary strings, return their sum (also a binary string).

For example,
a = "11"
b = "1"
Return "100".

思路:逐位相加,进位保留在和的下一位中。

C++实现代码:

#include<iostream>
#include<string>
#include<vector>
using namespace std;

class Solution
{
public:
    string addBinary(string a, string b)
    {
        int size1=a.size()-1;
        int size2=b.size()-1;
        int size=max(size1,size2);
        string digits(size+1,'0');
        while(size1>=0&&size2>=0)
        {
            if((a[size1]=='1')&&(b[size2]=='1'))
            {
                digits[size-1]='1';
                if(size1==0&&size2==0)
                    digits.insert(digits.begin(),'1');
                size1--;
                size2--;
                size--;
            }
            else if(((a[size1]=='1')||(b[size2]=='1'))&&(digits[size]=='0'))
            {
                digits[size]='1';
                size1--;
                size2--;
                size--;
            }
            else if(((a[size1]=='1')||(b[size2]=='1'))&&(digits[size]=='1'))
            {
                digits[size]='0';
                digits[size-1]='1';
                if(size1==0&&size2==0)
                    digits.insert(digits.begin(),'1');
                size1--;
                size2--;
                size--;
            }
            else
            {
                digits[size]=digits[size];
                size1--;
                size2--;
                size--;
            }
        }
        cout<<digits<<endl;
        if(size1>=0)
        {
            while(size1>=0&&size>=0)
            {
                if((digits[size]=='1')&&(a[size1]=='1'))
                {
                    digits[size]='0';
                    digits[size-1]='1';
                    if(size==0)
                        digits.insert(digits.begin(),'1');
                    size1--;
                    size--;
                }
                else if((digits[size]=='1')&&(a[size1]=='0'))
                {
                    size1--;
                    size--;
                }
                else
                {
                    digits[size]=a[size1];
                    size--;
                    size1--;
                }
            }
        }
        if(size2>=0)
        {
            while(size2>=0&&size>=0)
            {
                if((digits[size]=='1')&&(b[size2]=='1'))
                {
                    digits[size]='0';
                    digits[size-1]='1';
                    //最前面两个数相加需要进位的时候,在前面插入1
                    if(size==0)
                        digits.insert(digits.begin(),'1');
                    size2--;
                    size--;
                }
                else if((digits[size]=='1')&&(b[size2]=='0'))
                {
                    size2--;
                    size--;
                }
                else
                {
                    digits[size]=b[size2];
                    size--;
                    size2--;
                }
            }
        }
        return digits;
    }
};
int main()
{
    string b="100";
    string a="110010";
    Solution s;
    cout<<"digits: "<<s.addBinary(a,b)<<endl;
}

 只能想到这么麻烦的方法,哎。。。

    string addBinary(string a, string b) {
        if(a.empty())
            return b;
        if(b.empty())
            return a;
        int carry=0;
        int i=a.size()-1;
        int j=b.size()-1;
        string res;
        int sum=0;
        while(i>=0&&j>=0)
        {
            sum=a[i--]-'0'+b[j--]-'0'+carry;
            if(sum>=2)
            {
                char c=sum%2+'0';
                res=c+res;
                carry=1;
            }
            else
            {
                char c=sum+'0';
                res=c+res;
                carry=0;
            }
        }
        while(i>=0)
        {
            sum=carry+a[i--]-'0';
            if(sum>=2)
            {
                char c=sum%2+'0';
                res=c+res;
                carry=sum/2;
            }
            else
            {
                char c=sum+'0';
                res=c+res;
                carry=0;
            }
        }
        while(j>=0)
        {
            sum=carry+b[j--]-'0';
            if(sum>=2)
            {
                char c=sum%2+'0';
                res=c+res;
                carry=sum/2;
            }
            else
            {
                char c=sum+'0';
                res=c+res;
                carry=0;
            }
        }
        if(carry==1)
            res.insert(0,"1");
        return res;
    }
原文地址:https://www.cnblogs.com/wuchanming/p/4134608.html