LeetCode67.二进制求和 用c++写出
时间: 2024-10-04 18:02:53 浏览: 45
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
#include <string>
using namespace std;
class Solution {
public:
string addBinary(string a, string b) {
int carry = 0;
string result = "";
// 从右向左遍历,直到其中一个字符串结束
for (int i = a.size() - 1, j = b.size() - 1; i >= 0 || j >= 0; --i, --j) {
int sum = carry + (a[i] == '1' ? 1 : 0) + (b[j] == '1' ? 1 : 0);
carry = sum / 2; // 更新进位
result = to_string(sum % 2) + result; // 将当前位的结果添加到结果前
}
// 如果还有进位,将它追加到结果最后
if (carry > 0) {
result = '1' + result;
}
return result;
}
};
```
在这个代码中,我们首先初始化一个`carry`变量用于存储进位,然后通过两个指针从后向前遍历输入的二进制字符串,每次取两数对应位置的比特进行相加,并考虑之前的进位。最后,将所有计算出的结果从低位到高位拼接到一起。
LeetCode二进制求和 用c++写出
LeetCode上关于二进制求和的问题通常涉及到将两个非负整数用二进制形式相加。在C++中,你可以通过模拟这个过程来解决这类问题。假设我们有两个整数a和b,可以按照从低位到高位的顺序逐位相加,并考虑进位。
下面是一个简单的C++函数示例:
```cpp
#include <bitset>
using namespace std;
class Solution {
public:
int addBinary(string a, string b) {
int len_a = a.size(), len_b = b.size();
if (len_a < len_b) {
swap(a, b);
swap(len_a, len_b);
}
vector<int> carry(len_a + 1, 0); // 初始化进位数组
for (int i = len_a - 1; i >= 0; --i) {
int sum = a[i] - '0' + b[i] - '0' + carry[i+1]; // 当前位相加并考虑进位
carry[i] = sum % 2; // 更新当前位的进位
a[i] = sum / 2 + '0'; // 如果有进位,更新原数
}
// 如果最后还有进位,需要处理
if (carry[0]) a = "1" + a;
return stoi(a); // 最终结果转换回十进制整数
}
};
```
在这个函数中,`addBinary`接受两个字符串类型的输入表示二进制数,然后逐位相加,同时跟踪进位。最后返回的是转换后的十进制整数。
阅读全文