LeetCode67.二进制求和 用c++写出并给ab赋值
时间: 2024-10-04 12:03:02 浏览: 38
LeetCode题目67是一个关于二进制字符串求和的问题,给定两个非空的、由0和1组成的字符串`a`和`b`,你需要返回它们对应位置上数字相加后的结果,如果和超过1,则向高位进位。你可以假设每个字符串都是非空的,且只包含字符'0'和'1'。
下面是一个简单的C++函数实现,使用位运算来解决这个问题:
```cpp
class Solution {
public:
string addBinary(string a, string b) {
int len_a = a.size(), len_b = b.size();
int i = len_a - 1, j = len_b - 1, carry = 0;
string result = "";
while (i >= 0 || j >= 0 || carry > 0) {
int sum = carry;
if (i >= 0) sum += a[i] - '0';
if (j >= 0) sum += b[j] - '0';
carry = sum / 2;
result = char(carry + '0') + result;
i--;
j--;
}
return result;
}
};
```
在这个代码里,首先找到两个字符串的最长公共长度,然后从两端开始逐位相加。同时考虑进位`carry`。当所有的位都加完后,如果还有进位,则添加到结果的最前面。
至于`a`和`b`的具体赋值,这取决于题目中提供的例子。例如,如果我们有`a = "1101"`和`b = "1"`, 则可以这样调用函数:
```cpp
Solution sol;
string a = "1101";
string b = "1";
string sum = sol.addBinary(a, b);
cout << "The sum of binary strings is: " << sum << endl; // 输出:"1000"
```
阅读全文