【问题描述】给你两个二进制字符串,返回它们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。 【输入形式】两行,两个二进制串(长度不超过100) 【输出形式】结果串
时间: 2023-12-04 09:02:57 浏览: 29
```python
a = input().strip()
b = input().strip()
# 将 a, b 转为 int 类型
a = int(a, 2)
b = int(b, 2)
# 计算二进制和
s = a + b
# 将 s 转为二进制字符串
res = bin(s)[2:]
print(res)
```
注意,输出的结果是一个二进制字符串,需要将二进制字符串转为 int 类型,才能进行加法运算。在计算完成后,需要将结果转为二进制字符串,再输出。
相关问题
给你两个二进制字符串,返回它们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。
可以将两个二进制字符串先转化为十进制数,然后相加后再将和转化为二进制字符串。
代码如下:
```python
def addBinary(a: str, b: str) -> str:
# 将两个二进制字符串转化为十进制数
num_a = int(a, 2)
num_b = int(b, 2)
# 计算和
sum_num = num_a + num_b
# 将和转化为二进制字符串
res = bin(sum_num)[2:]
return res
```
其中,`int(a, 2)` 表示将二进制字符串 `a` 转化为十进制数,`bin(sum_num)` 表示将十进制数 `sum_num` 转化为二进制字符串。注意,转化后的二进制字符串前两个字符为 `'0b'`,需要去掉,所以用 `[2:]` 取子字符串。
给你两个二进制字符串,返回它们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。用C++
以下是一个可能的 C 语言实现:
```c
#include <string.h>
#include <stdlib.h>
char* addBinary(char* a, char* b) {
int len_a = strlen(a);
int len_b = strlen(b);
int len_res = (len_a > len_b ? len_a : len_b) + 1;
char* res = (char*)malloc(sizeof(char) * (len_res + 1));
res[len_res] = '\0';
int carry = 0;
int i = len_a - 1;
int j = len_b - 1;
int k = len_res - 1;
while (i >= 0 || j >= 0 || carry > 0) {
int sum = carry;
if (i >= 0) sum += a[i--] - '0';
if (j >= 0) sum += b[j--] - '0';
res[k--] = sum % 2 + '0';
carry = sum / 2;
}
while (res[k + 1] == '0') k++;
if (k < 0) {
char* zero = (char*)malloc(sizeof(char) * 2);
zero[0] = '0';
zero[1] = '\0';
free(res);
return zero;
} else {
char* result = (char*)malloc(sizeof(char) * (len_res - k + 1));
memcpy(result, res + k + 1, len_res - k);
free(res);
return result;
}
}
```
该函数的参数是两个二进制字符串 `a` 和 `b`,返回值是它们的和的二进制字符串。其中,我们需要先确定结果字符串的长度 `len_res`,然后从低位到高位依次计算每一位的和,并且保存进位 `carry`。最后,我们需要去掉结果字符串的前导零,并且注意特殊情况,如 "0" + "0" = "0"。