题目连接:HDU1047
详细解析见注释
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#define N 105
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int sum[N];//大数的和(输出的答案)
memset(sum,'\0',sizeof(sum));//‘\0’ 是结束符,就是清空的意思(初始化)
char num[N];//输入的数,注意是char型
memset(num,'\0',sizeof(num));
int rnum[N];//输入的数数字版,注意是int型
while(~scanf("%s",num))
{
if(strcmp(num,"0")==0)//num与'0'字符相等时
break;
memset(rnum,0,sizeof(rnum));
int len=strlen(num);
for(int i=0;i<len;i++)
rnum[i]=num[len-1-i]-'0';//char转换成int,且倒置数字(如123——>321),便于进行加法计算
memset(num,'\0',sizeof(num));//char转int后初始化
for(int i=0;i<N;i++)
{
sum[i]+=rnum[i];
if(sum[i]>9)//进位情况,个位与个位相加只存在进1位的情况
{
sum[i]-=10;
sum[i+1]++;
}
}
}
int t=0;//标记
for(int i=N-1;i>=0;i--)//从尾开始,此时数字是倒置的
if(sum[i])
{
t=i;
break;
}
for(int i=t;i>=0;i--)//从尾输出
printf("%d",sum[i]);
printf("\n");
if(n!=0)
printf("\n");
}
return 0;
}