LeetCode67—二进制求和用c语言写出代码
时间: 2024-10-08 07:07:59 浏览: 57
LeetCode第67题是“二进制求和”,题目要求计算两个非负整数的二进制表示下对应的位数上数字相加。这里是一个简单的C语言代码实现,使用了位运算技巧:
```c
#include <stdio.h>
int addBinary(int a, int b) {
// 将a和b转换为无符号32位整数,以便进行位操作
unsigned int carry = 0;
for (int i = 31; i >= 0; --i) {
int sum = ((a & 1U) + (b & 1U) + carry) % 2;
carry = (a & 1U) + (b & 1U) + carry > 1 ? 1 : 0;
a >>= 1;
b >>= 1;
}
// 如果有进位,将它添加到最高位
if (carry) {
a |= 1;
}
return a;
}
int main() {
int a = 5, b = 7;
printf("Sum in binary is: %d\n", addBinary(a, b));
return 0;
}
```
这个函数`addBinary()`首先将输入的十进制整数转换成无符号32位整数,然后从最低位开始逐位相加,并处理进位。最后返回结果。
相关问题
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`变量用于存储进位,然后通过两个指针从后向前遍历输入的二进制字符串,每次取两数对应位置的比特进行相加,并考虑之前的进位。最后,将所有计算出的结果从低位到高位拼接到一起。
LeetCode67.二进制求和 用c++写出
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时,所有位的加法都已经完成,返回的结果就是最终的答案。
阅读全文