九度OJ 1198:a+b (大数运算)
- 题目描述:
-
实现一个加法器,使其能够输出a+b的值。
- 输入:
-
输入包括两个数a和b,其中a和b的位数不超过1000位。
- 输出:
-
可能有多组测试数据,对于每组数据,
输出a+b的值。
- 样例输入:
-
2 6 10000000000000000000 10000000000000000000000000000000
- 样例输出:
-
8 10000000000010000000000000000000
思路:
大数加法,前缀补全0更容易计算。没必要一定转成字符串,也可转成数组。或者直接用字符计算,不转换成数字。
代码:
#include <stdio.h> #include <string.h> #define N 1000 int main(void) { int i, k; char s[N+1]; int a[N+1], b[N+1]; while (scanf("%s", s) != EOF) { k=0; for (i=strlen(s)-1; i>=0; i--, k++) a[k] = s[i]-48; for (; k<N+1; k++) a[k] = 0; scanf("%s", s); k=0; for (i=strlen(s)-1; i>=0; i--, k++) b[k] = s[i]-48; for (; k<N+1; k++) b[k] = 0; for (i=0; i<N+1; i++) { a[i] += b[i]; if (a[i] >= 10) { a[i+1] ++; a[i] %= 10; } } for (i=N; i>=0; i--) { if (a[i] != 0) break; } if (i<0) printf("0"); for (; i>=0; i--) printf("%d", a[i]); printf("\n"); } return 0; } /************************************************************** Problem: 1198 User: liangrx06 Language: C Result: Accepted Time:130 ms Memory:912 kb ****************************************************************/
编程算法爱好者。