给定两个字符串a和b,请计算它们的和,并以二进制 字符串的形式输出 输入为非空字符串且只包含数字1和0 输入字符串大于或等于1,且小于或等于10^4,且不 含前导0 使用C语言实现
时间: 2024-09-25 09:07:53 浏览: 41
在C语言中,你可以通过遍历字符串、将字符转换为整数然后相加的方式来实现这个功能。这里是一个简单的示例函数,它会接收两个字符串作为输入并返回它们的二进制和:
```c
#include <stdio.h>
#include <string.h>
// 将二进制字符串转换为整数
int binaryStrToInt(char* str) {
int num = 0;
for (int i = strlen(str) - 1; i >= 0; i--) {
if (str[i] == '1') {
num += pow(2, strlen(str) - i - 1);
}
}
return num;
}
// 计算并返回两个二进制字符串的和
char* addBinaryStrings(char* a, char* b) {
int len_a = strlen(a), len_b = strlen(b);
int carry = 0, sum = 0;
char result[len_a + len_b + 1]; // 包含空字符'\0'
for (int i = 0; i < len_a || i < len_b; i++) {
if (i < len_a) {
sum += (a[i] - '0');
}
if (i < len_b) {
sum += (b[i] - '0');
}
sum += carry;
carry = sum / 2;
result[i] = (sum % 2) + '0';
}
if (carry > 0) {
result[len_a + len_b] = '1'; // 如果有进位,在结果字符串末尾添加1
} else {
result[len_a + len_b] = '\0'; // 结束字符串
}
reverse(result); // 反转结果字符串,使得从低位到高位
return result;
}
void reverse(char* str) {
int start = 0, end = strlen(str) - 1;
while (start < end) {
char temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
}
int main() {
char* a = "1010"; // 输入示例
char* b = "1101";
char* sum = addBinaryStrings(a, b);
printf("Sum in binary: %s\n", sum);
free(sum); // 释放内存
return 0;
}
```
上述代码首先定义了两个辅助函数:`binaryStrToInt`用于将二进制字符串转换成整数,以及`reverse`用于反转字符串。`addBinaryStrings`函数实现了字符串相加的核心逻辑,最后在`main`函数中测试这个功能。
注意:在实际应用中,记得在完成任务后清理动态分配的内存,如上述代码中的`free(sum)`。
阅读全文