LeetCode67.二进制求和 用c++写出
时间: 2024-10-04 12:02:53 浏览: 3
LeetCode上的第67题是关于计算两个非负整数的二进制表示的和,同时考虑进位的情况。你可以使用位运算(bitwise operations)来解决这个问题,因为位运算是计算机处理二进制数据非常高效的方式。
下面是一个简单的C++解决方案:
```cpp
class Solution {
public:
int add(int a, int b) {
while (b != 0) { // 当第二个数不为0时继续循环
int carry = a & b; // 计算当前位的进位
a = a ^ b; // 异或操作得到当前位的结果
b = carry << 1; // 将进位左移一位
}
return a;
}
};
```
这个函数的工作原理是,通过`&`(按位与)操作获取当前位的进位,然后用`^`(按位异或)来更新结果,`<<`(左移)将进位向左移动一位以便下一次迭代。当第二个数`b`变为0时,所有位的加法都已经完成,返回的结果就是最终的答案。
相关问题
LeetCode67.二进制求和 用c++写出,确保可以运行
LeetCode题目67叫做“二进制求和”,其实这是一个字符串操作的问题,要求我们将两个非空的二进制字符串相加并返回结果。我们可以逐位相加,考虑进位问题。以下是用C++编写的解决方案:
```cpp
class Solution {
public:
string addBinary(string a, string b) {
int carry = 0;
int i = a.length() - 1, j = b.length() - 1;
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(sum % 2 + '0') + result;
i--;
j--;
}
return result;
}
};
```
在这个代码中,我们从两个字符串的尾部开始,计算当前位的和以及进位,并将结果添加到结果字符串的前面。当所有位都处理完毕且没有进位时,返回最终的结果。
LeetCode67.二进制求和 用c++写出并给ab赋值
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"
```