位运算
- 思路:
- 按照二进制求和定义,先对操作数翻转,逐位进行加法,使用 carry 记录进位情况,之后的结果再翻转;
class Solution {
public:
string addBinary(string a, string b) {
std::string result;
std::reverse(a.begin(), a.end());
std::reverse(b.begin(), b.end());
int n = std::max(a.size(), b.size());
int carry = 0;
for (int i = 0; i < n; ++i) {
carry += i < a.size() ? (a.at(i) == '1') : 0;
carry += i < b.size() ? (b.at(i) == '1') : 0;
result.push_back((carry % 2) ? '1' : '0');
carry /= 2;
}
if (carry) {
result.push_back('1');
}
std::reverse(result.begin(), result.end());
return result;
}
};