**最后要换行**
本题为高精度加法计算.
录入数据后,把每行填加前导0后使长度相同.
再从最后一列开始求和、进位、取余.
计算完毕后,如果进位不为0,就输出,作为最高位.
54321
50543
5
=>
54321
50543
00005
------
104869
#define maxn 128
int main()
{
char num[maxn][maxn];
int k=0,len[maxn],max=0;
while(scanf("%s",num[k])!=EOF&&strcmp(num[k],"0")!=0)
{
len[k]=strlen(num[k]);
if(len[k]>max)
max=len[k];
k++;
}
for(int i=0; i<k; i++)
{
if(len[i]<max)
{
int x=len[i],y=max,mid=y-x;
for(int j=x-1; j>=0; j--)
num[i][j+mid]=num[i][j]; ///往后移动j+mid位,使之从下标为max-1开始填,然后下面填前导0.
for(int j=0; j<y-x; j++) ///添加前导0,使每一行长度相等.
num[i][j]='0';
}
}
int ans[maxn],fro=0; ///fro 为进位(初始化为0 <=计算个位的时候,没有进位).
for(int i=max-1; i>=0; i--) ///从最后一位开始求和、取余、进位.
{
ans[i]=fro;
for(int j=0; j<k; j++)
ans[i]+=num[j][i]-'0';
fro=ans[i]/10;
ans[i]%=10;
}
if(fro!=0) ///最高位不为0,输出之
printf("%d",fro);
for(int i=0; i<max; i++)
printf("%d",ans[i]);
putchar('\n');
return 0;
}