https://oj.leetcode.com/problems/add-binary/
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) {
return b.size() > a.size() ? addOrderBinary(b, a) : addOrderBinary(a, b);
}
private:
// The length of string a should be no shorter than string b.
string addOrderBinary(string longStr, string shortStr) {
string result(longStr);
bool carry = false;
string::size_type longLen = longStr.size();
string::size_type shortLen = shortStr.size();
string::size_type left = longLen - shortLen;
int longStrIndex;
int shortStrIndex;
for (string::size_type i = shortLen; i > 0; i--) {
longStrIndex = i + left - 1;
shortStrIndex = i - 1;
if (carry) {
if (shortStr[shortStrIndex] == '1') {
continue;
}
if (result[longStrIndex] == '0') {
result[longStrIndex] = '1';
carry = false;
} else {
result[longStrIndex] = '0';
}
} else {
if (shortStr[shortStrIndex] == '0') {
continue;
}
if (result[longStrIndex] == '0') {
result[longStrIndex] = '1';
} else {
result[longStrIndex] = '0';
carry = true;
}
}
}
for (string::size_type i = left; i > 0; i--) {
if (!carry) {
break;
}
longStrIndex = i - 1;
if (result[longStrIndex] == '0') {
result[longStrIndex] = '1';
carry = false;
} else {
result[longStrIndex] = '0';
}
}
if (carry) {
result.insert(0, "1");
}
return result;
}
};