1292:给出一组大数,可长达100位,求它们的和。
和1205很相似。区别是进制不同。1205是两个数加,本题为多个数加。
Sample Input
1
123456789012345678901234567890
123456789012345678901234567890
123456789012345678901234567890
0
Sample Output
370370367037037036703703703670
思路为每个数单独贡献和值,这样就跟数的个数无关。
先不考虑进制,全加完后统一处理。
每个数的长度不同,因此存结果时先逆序比较方便。
和1205很相似。区别是进制不同。1205是两个数加,本题为多个数加。
Sample Input
1
123456789012345678901234567890
123456789012345678901234567890
123456789012345678901234567890
0
Sample Output
370370367037037036703703703670
思路为每个数单独贡献和值,这样就跟数的个数无关。
先不考虑进制,全加完后统一处理。
每个数的长度不同,因此存结果时先逆序比较方便。
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<memory.h>
using namespace std;
char a[100];
int res[105];
int main()
{
int n;
int length;
cin>>n;
getchar();
for(int i=0;i<n;i++)
{
memset(res,0,105*sizeof(int));
getchar();
//求和
while(1)
{
gets(a);
length=strlen(a);
if(length==1&&a[0]=='0')
{
break;
}
else
{
for(int i=0;i<length;i++)
res[i]+=a[length-1-i]-'0';
}
}
//进位
for(int i=0;i<105;i++)
{
res[i+1]+=res[i]/10;
res[i]=res[i]%10;
}
//输出
for(int i=105;i>0;i--)
{
if(res[i]!=0)
{
for(int j=i;j>=0;j--)
cout<<res[j];
cout<<endl;
break;
}
}
if(i!=n-1)
cout<<endl;
}
}