POJ 1503 Integer Inquiry

题目:

    大整数加法,每个整数至多包含100个数字,最多100个整数相加,计算并输出结果。

输入:

     最多输入100行数据,每行输入一个正整数,输入0结束输入。

输出:

    输出所有正整数累加的结果。

解题思路:

    大整数相加,采用数组完成,每个数组保存一位数字。100个包含100位数字的大数相加,结果最多有103位,所以输入数组长度为100,结果数组长度为103。

    大数保存到数组中时需要反转,使得大数的最低位与数组下标为0的位置对应,如大数12345保存到数组中为[5,4,3,2,1]。累加时从最低位开始累加,累加时要注意加上低位的进位,每累加一位时需要计算该位向高位的进位,使每位保存的数字小于10。所有大数累加完毕后,从大数高位开始输出计算结果。

代码:

#include<stdio.h>
#include<string.h>
int main()
{
	char sum[103]={0};
	char s[101];
	int i,j,len,c;
	scanf("%s", s);
	while(1)
	{
		//结束条件 
		if(s[0]=='0' && strlen(s)==1) break;
		
		len = strlen(s);
		c=0;
		//将本次输入 累加进结果中 
		for(i=len-1,j=0; i>=0; i--,j++)
		{
			sum[j] += s[i]-'0' + c;
			c = sum[j]/10;
			sum[j]=sum[j]%10;	
		}
		//处理累加结束后遗留的进位 
		while(c>0)
		{
			sum[j]+=c;
			c=sum[j]/10;
			sum[j]=sum[j]%10;
			j++;
		}

		scanf("%s", s);
	}
	i=102;
	//去掉前导0 
	while(sum[i]==0) i--;
	//打印结果 
	if(i<0) printf("%d\n",0);
	else
	{
	 while(i>=0) printf("%d", sum[i--]);
	 printf("\n");
    }
	return 0;
}


你可能感兴趣的:(c,Integer)