题目描述:两个二进制数相加,求和
解题思路:
- 两个字符串从后向前加,长度短的字符串前面补0;
- 相加的结果一一追加在返回值的后面,最后反转返回值;
20180801更新:更简洁明了的答案
class Solution {
public:
string addBinary(string a, string b) {
string s = "";
int la = a.length();
int lb = b.length();
int lmax = max(la, lb);
//进位
char cnt = '0';
for(int index = 0; index < lmax; index++)
{
char ca = index < la ? a[la - index - 1] : '0';
char cb = index < lb ? b[lb - index - 1] : '0';
char sum = ca == cb ? '0' : '1';
char ssum = sum == cnt ? '0' : '1';
if((ca == '1' && cb == '1') || (sum == '1' && cnt == '1'))
cnt = '1';
else
cnt = '0';
s = s + ssum;
}
if(cnt == '1')
s = s + cnt;
reverse(s.begin(), s.end());
return s;
}
};