题目链接: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