代码有问题,输入"11" "11"输出是"10",但是正确答案是"110"
时间: 2023-08-08 14:13:49 浏览: 90
非常抱歉,我之前的回答有误。你是正确的,代码中的问题导致了错误的输出。
在代码中,`a[j]` 和 `b[j]` 是字符类型(char),当执行 `a[j] - '0' + b[j]` 时,它们会被转换为对应的整数值。然而,这个表达式没有考虑进位的情况,因此会导致错误的结果。
以下是修正后的代码:
```cpp
string addBinary(string a, string b) {
int sizea = a.size(), sizeb = b.size();
string sum = "";
while (sizea < sizeb) {
a = '0' + a;
sizea++;
}
while (sizea > sizeb) {
b = '0' + b;
sizeb++;
}
int carry = 0; // 进位
for (int i = sizea - 1; i >= 0; i--) {
int sum1 = a[i] - '0' + b[i] - '0' + carry;
if (sum1 == 0 || sum1 == 1) {
sum = to_string(sum1) + sum;
carry = 0; // 不需要进位
} else if (sum1 == 2) {
sum = '0' + sum;
carry = 1; // 需要进位
} else if (sum1 == 3) {
sum = '1' + sum;
carry = 1; // 需要进位
}
}
if (carry == 1) {
sum = '1' + sum; // 如果最高位有进位,需要在最前面添加一个字符 '1'
}
return sum;
}
```
通过添加进位的处理,修正后的代码应该能够正确地进行二进制字符串相加,输出正确的结果。
再次对之前给你带来的困惑表示抱歉。感谢你的指正!如果还有其他问题,请随时提问。