题目链接:http://poj.org/problem?id=1503
Description
Input
Output
Sample Input
123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 0
Sample Output
370370367037037036703703703670
Source
题意:就是给出多个大数,求它们的和!
下面给出两种代码:
代码一:
#include <cstdio> #include <cstring> const int MAXN = 117; int main() { char s[MAXN]; int sum[MAXN] = {0}; int i, j; while(gets(s)) { int len = strlen(s); if(s[0] == '0' && len == 1) break; for(i = 110, j = len-1; j >= 0; i--, j--) { sum[i] += s[j]-'0'; } } for(i = 110; i > 0; i--) { sum[i-1] += sum[i] / 10; sum[i] %= 10; } for(i = 0; sum[i] == 0 && i < 111; i++) { if(i == 111)//意味着全为零 { printf("0\n"); } } for( ; i < 111; i++) { printf("%d",sum[i]); } printf("\n"); return 0; }
代码二:
#include <cstdio> #include <cstring> const int MAXN = 117; int main() { char s[MAXN][MAXN]; int maxx = -1, r = 0; for(int i = 0; ; i++) { gets(s[i]); int len = strlen(s[i]); if(len > maxx)//寻找最长的长度 maxx = len; if(s[i][0] == '0' && len == 1) break; r++; } int c[MAXN], l = 0; int p = 0;//进位 for(int i = maxx-1; i >= 0; i--) { int sum = 0; for(int j = 0; j < r; j++) { sum+=s[j][i]-'0'; } sum += p; if(sum > 9) { p = sum/10; sum %=10; } else p = 0; c[l++] = sum; if(i == 0 && p != 0) c[l++] = p; } for(int i = l-1; i >= 0; i--) { printf("%d",c[i]); } printf("\n"); return 0; }
poj 1503 Integer Inquiry(多个大数相加),布布扣,bubuko.com
poj 1503 Integer Inquiry(多个大数相加)
原文地址:http://blog.csdn.net/u012860063/article/details/38660691