二进制求和
题目描述
给两个二进制字符串a
和b
,以二进制字符串形式返回它们的和。
示例
输入:a = “1010”,b = “1011”
输出:“10101”
这题可以利用整型变量存储两个二进制字符串的和,然后再转换为字符串返回。
但可能会出现数据溢出问题,只好在每次遍历中求出两个二进制数最后一位的和压入栈中,最后将结果反转返回。
string addBinary(string a, string b) {
string ans;
int sum = 0;
// 遍历两个字符串
for (int i = a.size() - 1, j = b.size() - 1; i >= 0 || j >= 0;) {
// 对最后一位求和
if (i >= 0) {
sum += a[i] == '1' ? 1 : 0;
i--;
}
if (j >= 0) {
sum += b[j] == '1' ? 1 : 0;
j--;
}
// 插入求和结果
ans.push_back(sum % 2 + '0');
sum /= 2;
}
// 最后可能会有进位(sum可能还会有余数)
while (sum) {
ans.push_back(sum % 2 + '0');
sum /= 2;
}
// 反转字符串
std::reverse(ans.begin(), ans.end());
return ans;
}