题目:
大整数加法,每个整数至多包含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;
}