题意:
两个二进制数相加,输出结果
思路:
各种模拟均可,比如先把A和B倒过来,再按位相加,最后把结果再倒回来。
不过为了快,我是这样做的——假设A比B长,那么我对位相加B的长度。这时如果没有进位,那么A长出B的部分就不会变了;如果有进位,那么继续往A的高位加,直到某一次进位为0,那么更高位的A就不变了;如果直到最后还有进位,那就最前面添加一个最高位1。
代码:
class Solution {
public:
string addBinary(string a, string b) {
if (a.size() < b.size()) {
swap(a, b);
}
int i = a.size() - 1;
int j = b.size() - 1;
stringstream ss;
int add = 0;
while (j >= 0) {
add += a[i] + b[j] - '0' - '0';
--i;
--j;
ss << (add & 1);
add >>= 1;
}
while (add && i >= 0) {
add += a[i] - '0';
--i;
ss << (add & 1);
add >>= 1;
}
if (add > 0) {
ss << add;
string ans = ss.str();
reverse(ans.begin(), ans.end());
return ans;
}
string ans = ss.str();
reverse(ans.begin(), ans.end());
return a.substr(0, i + 1) + ans;
}
};