题目链接:UVA 424
大数加法模板题,直接上代码。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int N=1e2;
int ans[N+10];
char s[N+5];
int main()
{
int maxlen=0;
while(~scanf("%s",s)&&strcmp(s,"0")!=0)
{
int len=strlen(s);
maxlen=max(len,maxlen); //记录各个数的最大长度
int cnt=0;
for(int i=len-1;i>=0;i--) //从低位开始诸位加到ans上,故ans中,低位在左,高位在右
ans[cnt++]+=s[i]-'0';
}
for(int i=0;i<maxlen;i++) //从低位开始遍历,对大于等于10的位进行进位
if(ans[i]>=10)
{
ans[i+1]+=ans[i]/10;
ans[i]%=10;
}
while(ans[maxlen]!=0) //对高位进行处理
{
maxlen++;
if(ans[maxlen-1]>=10)
{
ans[maxlen]+=ans[maxlen-1]/10;
ans[maxlen-1]%=10;
}
}
for(int i=maxlen-1;i>=0;i--) //低位在左,高位在右,故逆序输出
printf("%d",ans[i]);
printf("\n");
return 0;
}