题目:给定两个字符串表示的二进制数,求其和,并输出字符串表示的二进制结果。
思路:从低位往高位累加,循环判断是否有进位。
class Solution {
public:
string addBinary(string a, string b) {
int i = a.length() - 1;
int j = b.length() - 1;
int carry = 0; //进位标志
string res = "";
while (i >= 0 || j >= 0)
{
int digitA = i >= 0 ? a[i -- ] - '0' : 0; //判断字符串a,b是否已遍历完
int digitB = j >= 0 ? b[j -- ] - '0' : 0;
int sum = digitA + digitB + carry; //当前循环中的和
carry = sum >= 2 ? 1 : 0; //判断是否进位
sum = sum >= 2 ? sum - 2 : sum; //进位后和减去2,否则不变
res += sum + '0'; //最后累加当前位的和
}
if (carry == 1) res += '1'; //判断最高位是否有进位
reverse(res.begin(), res.end()); //反转字符串得到最终结果
return res;
}
};