使用c++【问题描述】给你两个二进制字符串,返回它们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。 【输入形式】两行,两个二进制串(长度不超过100) 【输出形式】结果串
时间: 2023-12-03 19:03:15 浏览: 64
以下是使用C语言实现的代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 101
char* addBinary(char* a, char* b) {
char* result = (char*)malloc(MAX_LEN * sizeof(char));
int len_a = strlen(a);
int len_b = strlen(b);
int i = len_a - 1, j = len_b - 1, k = 0;
int carry = 0; // 进位标志
while (i >= 0 || j >= 0) {
int sum = carry;
if (i >= 0) {
sum += a[i] - '0';
i--;
}
if (j >= 0) {
sum += b[j] - '0';
j--;
}
result[k++] = sum % 2 + '0'; // 计算当前位的值并转为字符
carry = sum / 2; // 计算进位值
}
if (carry > 0) {
result[k++] = carry + '0';
}
result[k] = '\0';
int len_res = strlen(result);
for (i = 0; i < len_res / 2; i++) { // 反转字符串
char temp = result[i];
result[i] = result[len_res - i - 1];
result[len_res - i - 1] = temp;
}
return result;
}
int main() {
char a[MAX_LEN], b[MAX_LEN];
scanf("%s%s", a, b);
char* result = addBinary(a, b);
printf("%s\n", result);
free(result); // 释放动态分配的内存
return 0;
}
```
代码说明:
- 使用 `malloc` 函数动态分配一个长度为 `MAX_LEN` 的字符数组作为结果字符串,最后需要手动释放内存。
- 从最低位开始,分别将两个二进制串的对应位相加,注意进位标志的处理。
- 计算出每一位的值后,将其转为字符存入结果字符串中。
- 如果最高位有进位,则需要在结果字符串最高位添加一个字符 `'1'`。
- 最后反转结果字符串即可。
阅读全文