用C语言:计算两个整数A和B的和。 输入 输入有若干行,每行为由空格分隔的一对整数A和B,如: 5 12 输出 输出数据A和B的和。 示例输入 25 33 示例输出 58 提示 A和B可能很大,最大不超过1000位十进制数。A,B也有可能是负数
时间: 2024-05-02 20:19:54 浏览: 76
霍夫曼编码,对输入的字符集和各个字符对应的权值求出每个字符的霍夫曼编码。
5星 · 资源好评率100%
代码如下:
```
#include <stdio.h>
#include <string.h>
int main()
{
char a[1001], b[1001], c[1002];
int len1, len2, len, carry, sum, i, j, k;
while (scanf("%s%s", a, b) == 2) {
len1 = strlen(a);
len2 = strlen(b);
memset(c, '0', sizeof(c)); // 初始化c为0
carry = 0; // 进位初始化为0
k = 0; // c的长度初始化为0
for (i = len1 - 1, j = len2 - 1; i >= 0 || j >= 0; i--, j--) {
sum = carry; // 当前位的值等于上一次的进位
if (i >= 0) // 如果a的当前位存在
sum += a[i] - '0'; // 加上当前位的值
if (j >= 0) // 如果b的当前位存在
sum += b[j] - '0'; // 加上当前位的值
c[k++] = sum % 10 + '0'; // 更新c的下一位
carry = sum / 10; // 计算进位
}
if (carry)
c[k++] = carry + '0'; // 如果还有进位,更新c的下一位
while (--k >= 0 && c[k] == '0'); // 去掉c前导零
if (k < 0)
puts("0"); // 如果c为0,输出0
else {
c[k + 1] = '\0'; // 为c添加字符串结束符
printf("%s\n", c + k); // 输出c
}
}
return 0;
}
```
解释:本题需要用到高精度加法,即对于两个很大的整数,不能直接用int变量存储,而是要用字符数组来表示。思路是从低位到高位,依次对两个数对应位相加,存在一个进位carry,如此累加。最后要注意去掉前导零。
阅读全文