ZOJ-1292 大数相加

1292:给出一组大数,可长达100位,求它们的和。

和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;

	}
	
}

你可能感兴趣的:(ZOJ)