总时间限制:
1000ms
内存限制:
65536kB
描述
求两个不超过200位的非负整数的和。
输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555
来源
程序设计实习2007
#include<stdio.h>
#include<string.h>
int main()
{
char s1[250],s2[250];
int a[250],b[250]; //核心思想:由于输出的数字过,故用数组保存,且为了一次性
memset(a,0,sizeof(a)); //的输入,用字符串数组
memset(b,0,sizeof(b));
gets(s1);
gets(s2);
int i,j=0;
for(i=strlen(s1)-1;i>=0;i--)
{
a[j++]=s1[i]-'0'; //对输出的字符串数组进行逆序存入普通数组
}
j=0;
for(i=strlen(s2)-1;i>=0;i--)
{
b[j++]=s2[i]-'0';
}
for(i=0;i<250;i++)
{
a[i]+=b[i]; //开始对整型数组进行相加,判断进位
if(a[i]>=10)
{
a[i]-=10;
a[i+1]+=1;
}
}
int flag=0; //类似bool,用于减去多余的前导0,mark一下
for(i=245;i>=0;i--)
{
if(flag||a[i])
{
printf("%d",a[i]);
flag=1;
}
}
if(!flag) //如果全是0的话,前面的无法执行,但还是要输出0
{
printf("0");
}
return 0;
}