用C语言编写程序实现两个超长正整数(每个最长80位数字)的加法运算。从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。第一行是超长正整数A; 第二行是超长正整数B;输出只有一行,是两个长整数的运算结果,从高到低依次输出各位数字。各位数字紧密输出。用字符串输入两个超长整数,分别存放在两个字符串中,每一位对应一个字符串中的字符。以较短的超长整数为基准,从低位到高位,对应位转换成数字后相加,再加上前一位相加的进位,得到的和模上10再转换为字符即为当前位,得到的和整除10即为当前位的进位。将计算得
时间: 2024-02-17 18:01:21 浏览: 59
到的各位数字存储在一个字符数组中,最后再输出即可。以下是实现该功能的代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 81
int main() {
char str_a[MAX_LEN], str_b[MAX_LEN], result[MAX_LEN];
int len_a, len_b, len_max, len_min, i, carry = 0, sum;
// 读入两个字符串
scanf("%s%s", str_a, str_b);
// 计算字符串长度
len_a = strlen(str_a);
len_b = strlen(str_b);
// 确定较长的字符串长度
len_max = len_a > len_b ? len_a : len_b;
len_min = len_a < len_b ? len_a : len_b;
// 将较短的字符串前面补0,使两个字符串长度相等
if (len_a > len_b) {
for (i = 0; i < len_a - len_b; i++) {
str_b[len_b + i] = '0';
}
str_b[len_a] = '\0';
} else {
for (i = 0; i < len_b - len_a; i++) {
str_a[len_a + i] = '0';
}
str_a[len_b] = '\0';
}
// 从低位到高位逐位相加
for (i = len_max - 1; i >= 0; i--) {
sum = str_a[i] - '0' + str_b[i] - '0' + carry;
result[i] = sum % 10 + '0';
carry = sum / 10;
}
// 如果最高位有进位,需要将结果的位数加1并在最前面输出1
if (carry == 1) {
result[len_max] = '1';
len_max++;
}
// 输出结果
for (i = 0; i < len_max; i++) {
putchar(result[i]);
}
putchar('\n');
return 0;
}
```
输入示例:
```
00000000000000000000000000000000000000000000000000000083
123456789012345678901234567890123456789012345678901234567890
```
输出示例:
```
123456789012345678901234567890123456789012345678901234567973
```