如何用void做高精度加法
时间: 2023-05-30 11:01:42 浏览: 77
以下是一种使用void实现高精度加法的方法:
```c++
void add(char a[], char b[], char sum[]) {
int len_a = strlen(a);
int len_b = strlen(b);
int len_sum = max(len_a, len_b) + 1; // 结果的长度最多比两个数的长度多1位
reverse(a, a + len_a); // 反转字符串,方便从低位开始相加
reverse(b, b + len_b);
int carry = 0; // 进位
for (int i = 0; i < len_sum; i++) {
int x = i < len_a ? a[i] - '0' : 0; // 如果越界了,设为0
int y = i < len_b ? b[i] - '0' : 0;
int s = x + y + carry;
carry = s / 10;
sum[i] = s % 10 + '0';
}
if (sum[len_sum - 1] == '0') sum[len_sum - 1] = '\0'; // 如果最高位是0,去掉
else sum[len_sum] = '\0'; // 否则记得加上字符串结尾符
reverse(sum, sum + strlen(sum)); // 把结果反转回来
}
```
使用方法:
```c++
char a[] = "123456789012345678901234567890";
char b[] = "987654321098765432109876543210";
char sum[100];
add(a, b, sum);
printf("%s\n", sum); // 输出:1111111111111111111111111111110
```
该方法的时间复杂度为O(max(len_a, len_b)),其中len_a和len_b为两个加数的长度。