题目描述:
十进制大数的加法运算。
输入描述:
输入文件的第1行为一个整数N,表示输入文件中接下来有N组数据。每组数据最多包含100行。每一行由一个非常长的十进制整数组成,这个整数的长度不会超过100个字符而且只包含数字,每组数据的最后一行为0,表示这组数据结束。
每组数据之间有一个空行。
输出描述:
对输入文件中的每组数据,输出它们的和。每两组数据的输出之间有一个空行。
样例输入:
1
99999278961257987
126792340765189
998954329065419876
432906541
23
0
样例输出:
1099080400800349616
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char buffer[200];//输入的数字
int array[200][200];//逆序存储每个数字
int ans[200];
int i,j,k;//循环变量
int num_integers;//数字个数
int len,maxlen=0;//数字长度、最长数字的长度
int sum,carry=0,digit;//每位求和后的总和、进位和结果
int n;//测试数据数
scanf("%d",&n);
while(n--)
{
memset(buffer,0,sizeof(buffer));
memset(array,0,sizeof(array));
memset(ans,0,sizeof(ans));
for(num_integers=0;num_integers<200;num_integers++)
{
gets(buffer);
if(strcmp(buffer,"0")==0) break;
len=strlen(buffer);
if(len>maxlen) maxlen=len;
for(i=0;i<len;i++)
{
array[num_integers][i]=buffer[len-1-i]-'0';
//printf("%d",array[num_integers][i]);
}
}
for(j=0;j<maxlen+2;j++)
{
sum=carry;
for(k=0;k<num_integers;k++)
sum+=array[k][j];
carry=sum/10;
digit=sum%10;
ans[j]=digit;
//printf("%d",ans[j]);
}
for(i=maxlen+2;i>=0;i--)
{
if(ans[i]!=0) break;
}
while(i>=0) printf("%d",ans[i--]);
puts("\n");
}
return 0;
}