题目:
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
class Solution {
public:
string addBinary(string a, string b) {
//两个字符串从后向前扫描,相加,结果按低位优先存放,反转res使结果按高位优先存放
// if(a.empty()) return b;//若其中一个串为空,则结果等于另一个串
// if(b.empty()) return a;
string res;
int ia = a.size()-1, ib = b.size()-1;
int carry = 0;
while(ia >= 0 && ib >= 0){//相加
int tmp = (a[ia]-'0')+(b[ib]-'0')+carry;
res.push_back(tmp%2 + '0');
carry = tmp >> 1;
--ia; --ib;
}
//处理a或b的剩余高位
while(ia >= 0){
int tmp = a[ia]-'0'+carry;
res.push_back(tmp%2 + '0');
carry = tmp >> 1;
--ia;
}
while(ib >= 0){
int tmp = b[ib]-'0'+carry;
res.push_back(tmp%2 + '0');
carry = tmp >> 1;
--ib;
}
if(carry) res.push_back(carry+'0');//最后存在进位
reverse(res.begin(), res.end());//反转res使结果按高位优先存放
return res;
}
};