写一段二进制高精度加法的C++代码
时间: 2023-12-01 11:04:32 浏览: 99
下面是一段二进制高精度加法的C代码:
```c
#include <stdio.h>
#include <string.h>
void addBinary(char *a, char *b) {
int len1 = strlen(a), len2 = strlen(b);
int maxLen = len1 > len2 ? len1 : len2; // 确定最长的二进制串长度
int carry = 0; // 进位标志
char result[maxLen + 1]; // 存储结果
int i = len1 - 1, j = len2 - 1, k = maxLen - 1;
for (; i >= 0 && j >= 0; i--, j--, k--) {
int sum = a[i] - '0' + b[j] - '0' + carry;
result[k] = sum % 2 + '0'; // 计算当前位的值并存储到结果数组中
carry = sum / 2; // 计算进位
}
while (i >= 0) { // 处理 a 串剩余部分
int sum = a[i--] - '0' + carry;
result[k--] = sum % 2 + '0';
carry = sum / 2;
}
while (j >= 0) { // 处理 b 串剩余部分
int sum = b[j--] - '0' + carry;
result[k--] = sum % 2 + '0';
carry = sum / 2;
}
if (carry) { // 如果最高位有进位,需要再增加一位
printf("1%s\n", result);
} else {
printf("%s\n", result);
}
}
int main() {
char a[100], b[100];
scanf("%s %s", a, b);
addBinary(a, b);
return 0;
}
```
该代码实现了两个二进制串的高精度加法,其中使用了字符串存储二进制串,并且使用了倒序遍历的方式进行计算。在计算过程中,需要注意进位的处理,以及最高位进位时需要再增加一位。
阅读全文