Add Binary

来源:互联网 发布:知乎体格式 编辑:程序博客网 时间:2024/06/10 04:50
-----QUESTION-----

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

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

-----SOLUTION-----

class Solution {public:    string addBinary(string a, string b) {        int aLen = a.length();        int bLen = b.length();        bool carry = false;        int aPointer = aLen-1;        int bPointer = bLen-1;        if(aLen >= bLen){            while(bPointer >=0)            {                if(!carry){                    if(a[aPointer] == '0' && b[bPointer] == '0')                    {                        a[aPointer] = '0';                    }                    else if(a[aPointer] == '1' && b[bPointer] == '1')                    {                        a[aPointer] = '0';                        carry = true;                    }                    else                    {                        a[aPointer] = '1';                    }                }                else                {                    if(a[aPointer] == '0' && b[bPointer] == '0')                    {                        a[aPointer] = '1';                        carry = false;                    }                    else if(a[aPointer] == '1' && b[bPointer] == '1')                    {                        a[aPointer] = '1';                    }                    else                    {                        a[aPointer] = '0';                    }                }                aPointer--;                bPointer--;            }            while(aPointer>=0 && carry)            {                if(a[aPointer] == '0')                {                    a[aPointer] = '1';                    carry = false;                    break;                }                a[aPointer]='0';                aPointer--;            }            if(carry)            {                a = "1" + a;            }            return a;        }        else{            while(aPointer >=0)            {                if(!carry){                    if(a[aPointer] == '0' && b[bPointer] == '0')                    {                        b[bPointer] = '0';                    }                    else if(a[aPointer] == '1' && b[bPointer] == '1')                    {                        b[bPointer] = '0';                        carry = true;                    }                    else                    {                        b[bPointer] = '1';                    }                }                else                {                    if(a[aPointer] == '0' && b[bPointer] == '0')                    {                        b[bPointer] = '1';                        carry = false;                    }                    else if(a[aPointer] == '1' && b[bPointer] == '1')                    {                        b[bPointer] = '1';                    }                    else                    {                        b[bPointer] = '0';                    }                }                aPointer--;                bPointer--;            }            while(bPointer>=0 && carry)            {                if(b[bPointer] == '0')                {                    b[bPointer] = '1';                    carry = false;                    break;                }                b[bPointer] = '0';                bPointer--;            }            if(carry)            {                b = "1" + b;            }            return b;        }    }};


0 0