给你两个正的小数A和B,请编写一个c语言程序以计算出A+B的值。 输入 输入包含多组测试数据,请处理到文件结束。 每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。 输出 请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见样例输入。 样例输入 1.1 2.9 1.1111111111 2.3444323343 1 1.1 样例输出 4 3.4555434454 2.1
时间: 2024-03-21 17:38:20 浏览: 54
以下是解答:
```c
#include <stdio.h>
#include <string.h>
int main() {
char a[405], b[405], ans[405];
while (scanf("%s%s", a, b) != EOF) {
int lena = strlen(a), lenb = strlen(b);
int len = (lena > lenb ? lena : lenb) + 1; // 计算结果最多有 len+1 位
for (int i = 0; i < lena; i++) a[i] -= '0'; // 将数字字符转成数字
for (int i = 0; i < lenb; i++) b[i] -= '0';
for (int i = 0; i < len; i++) ans[i] = 0; // 初始化为 0
for (int i = 0; i < len; i++) {
if (i < lena) ans[i] += a[lena - 1 - i];
if (i < lenb) ans[i] += b[lenb - 1 - i]; // 从低位往高位计算
if (ans[i] >= 10) {
ans[i] -= 10;
ans[i+1]++;
}
}
int i = len - 1;
while (i > 0 && ans[i] == 0) i--; // 删除前导 0
for (; i >= 0; i--) printf("%d", ans[i]); // 从高位往低位输出
printf("\n");
}
return 0;
}
```
解题思路:
这是一道高精度加法的题目,思路和一般的高精度加法类似。我们定义 `a` 和 `b` 分别表示加数和被加数,`ans` 表示它们的和。首先将 `a` 和 `b` 中的每个数字字符转换成数字,方便计算。然后从低位往高位遍历 `a` 和 `b`,将它们对应位上的数字相加,并将结果存储到 `ans` 数组中。如果某一位的结果大于等于 10,就需要进位,即将当前位减去 10,将进位加到下一位。最后需要将 `ans` 数组从高位往低位输出,并删除前导 0。
阅读全文