您的位置:首页 > 其它

大数加法

2013-09-08 19:42 399 查看
题目描述:

十进制大数的加法运算。

输入描述:

输入文件的第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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: