1. 程式人生 > >二進位制加法的實現(字串形式) Add Binary

二進位制加法的實現(字串形式) Add Binary

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

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

思路:二進位制加法和普通加法的思路沒什麼差別,甚至更簡單。所需要注意的細節就是進位。從最低位開始,進位可能伴隨計算直到最高位。所以每一位的加法運算都要將上一次的進位加進去。

對於某一位a和b,上一為的進位c,該為求和之後的和是(a+b+c)%2,進位是(a+b+c)/2。

程式碼:

class Solution {
public:
    string addBinary(string a, string b) {
        if(a.empty() || a == "0")
            return b;
        else if(b.empty() || b == "0")
            return a;
        
        string sum = ""; //sum記錄和
        int la,lb,c;
        la = a.length()-1;
        lb = b.length()-1;
        c = 0; //c記錄進位
        while(la>=0 && lb>=0)
        {
            int tmp = a[la] - '0' + b[lb] - '0' + c;
            c = tmp/2;
            sum = (char)('0'+ tmp%2) + sum;
            la--;
            lb--;
        }
        //如果比較長的一方還有剩餘
        while(la>=0)
        {
            int tmp = a[la] - '0' + c;
            c = tmp/2;
            sum = (char)('0' + tmp%2) + sum;
            la--;
        }
        while(lb>=0)
        {
            int tmp = b[lb] - '0' + c;
            c = tmp/2;
            sum = (char)('0' + tmp%2) + sum;
            lb--;
        }
        //如果最高位需要進位
        if(c == 1)
            sum = "1" + sum;
        return sum;
    }
};