题目描述
Given two binary strings, return their sum (also a binary string).
For example, a = "11" b ="1" Return "100".
解题思路
大数相加二进制版。 先把两个数从最小位开始相加,最后把较长那个数与carry相加,直到结束。
AC代码
class Solution {
public:
string addBinary(
string a,
string b) {
string ans;
int carry =
0;
int ai = a.size() -
1, bi = b.size() -
1;
for (; ai >=
0 && bi >=
0; --ai, --bi) {
int sum = (a[ai] -
'0') + (b[bi] -
'0') + carry;
ans.push_back(sum %
2 +
'0');
carry = sum /
2;
}
string longStr = ai <
0 ? b : a;
int startIdx = ai <
0 ? bi : ai;
for (; startIdx >=
0; --startIdx) {
int sum = (longStr[startIdx] -
'0') + carry;
ans.push_back(sum %
2 +
'0');
carry = sum /
2;
}
if (carry !=
0)
ans.push_back(carry +
'0');
reverse(ans.begin(), ans.end());
return ans;
}
};
转载请注明原文地址: https://ju.6miu.com/read-25458.html