很长整数是指无法用long型数存储的数,因此需要用字符串数组来存储两个被加数,相加的结果也保存于字符数组中,假如被加数长度不超过十进制100位,请编程实现该加法程序并将相加结果输出。 输入有多组测试数据。每组数据包含两个很长的整数。 输出很长整数加法结果 样例输入 35555555555555555555 55555555555555555555 样例输出 91111111111111111110 用c语言
时间: 2024-02-06 17:10:51 浏览: 120
以下是用 C 语言实现该加法程序的示例代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 105
void reverse(char *str) {
int len = strlen(str);
for (int i = 0; i < len / 2; i++) {
char temp = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = temp;
}
}
int main() {
char str_a[MAX_LEN], str_b[MAX_LEN];
while (scanf("%s %s", str_a, str_b) == 2) {
reverse(str_a);
reverse(str_b);
int len_a = strlen(str_a), len_b = strlen(str_b);
char result[MAX_LEN] = {0};
int carry = 0, idx = 0;
while (idx < len_a || idx < len_b) {
int sum = carry;
if (idx < len_a) {
sum += str_a[idx] - '0';
}
if (idx < len_b) {
sum += str_b[idx] - '0';
}
result[idx] = sum % 10 + '0';
carry = sum / 10;
idx++;
}
if (carry) {
result[idx++] = carry + '0';
}
if (idx == 0) {
result[idx++] = '0';
}
result[idx] = '\0';
reverse(result);
printf("%s\n", result);
}
return 0;
}
```
解释如下:
1. 定义了一个 `reverse` 函数,用于翻转字符串。
2. 在主函数中,使用 `scanf` 函数读入两个字符串。
3. 对两个字符串进行翻转操作,方便后面的加法计算。
4. 定义一个字符数组 `result` 用于存储相加的结果,初始化为全 0。
5. 从低位到高位依次计算每一位的和,同时考虑进位的情况。
6. 如果最高位有进位,则需要在字符数组 `result` 的末尾添加一个字符,使得最终结果正确。
7. 如果两个字符串的长度都为 0,则直接输出 0。
8. 最后将得到的结果翻转回来,输出即可。
注意事项:
1. 这里使用了一个常用的技巧,即将字符串翻转后进行加法计算,最后再将结果翻转回来。这样做的好处是可以避免在计算过程中需要考虑高位补 0 的情况,简化了代码实现。
2. 在计算每一位的和时,需要考虑被加数长度不同的情况,因此需要分别判断两个被加数是否还有未处理的位。
3. 最终结果需要翻转回来输出,否则会输出错误结果。
阅读全文