二進位制加法的實現(字串形式) Add Binary
阿新 • • 發佈:2018-12-24
題目: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; } };