给你两个二进制字符串,返回它们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。用C++
时间: 2023-06-12 16:03:42 浏览: 46
以下是一个可能的 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"。