-
描述
-
求两个不超过200位的非负整数的和。
输入
- 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。 输出
- 一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。 样例输入
-
22222222222222222222 33333333333333333333
样例输出
-
55555555555555555555
大整数的处理的基本方式是差不多的,以用字符串的方式进行输入,然后再把字符串存入到整型数组里面进行处理。下面附上两个ac代码,第一个是没有进过优化的代码,第二个代码是经过他人讲解优化后的代码,就个人来说还是非常喜欢第二种代码。
版本一:
#include<stdio.h>
#include<string.h>
int main()
{
char s1[210],s2[210];
int a[210]={0},b[210]={0},i,j=0,k,t=0,l1,l2;
gets(s1);
gets(s2);
l1=strlen(s1);
l2=strlen(s2);
for(i=l1-1;i>=0;i--)
a[j++]=s1[i]-'0';
for(j=0,i=l2-1;i>=0;i--)
b[j++]=s2[i]-'0';
if(l1>l2)
k=l1;
else
k=l2;
for(i=0;i<=k;i++)
{
a[i]+=b[i];
if(a[i]>9)
{
t=a[i];
a[i]%=10;
a[i+1]+=t/10;
}
}
for(i=k;i>=0&&a[i]==0;i--);
if(i>=0)
{
for(;i>=0;i--)
printf("%d",a[i]);
}
else
printf("0");
return 0;
}
版本二:
#include<cstdio>
#include<cstring>
char a[202],b[202];
int c[202],d[202];
int main()
{
int l1,l2,i,k,t;
scanf("%s%s",a,b);
l1=strlen(a),l2=strlen(b);
for(i=0;i<l1;i++) c[l1-i-1]=a[i]-'0';
for(i=0;i<l2;i++) d[l2-i-1]=b[i]-'0';
l1>l2?k=l1:k=l2;
for(i=0;i<=k;i++)
t=c[i]+d[i],c[i]=t%10,c[i+1]+=t/10;
while(!c[k]&&k)k--;
for(;k>=0;k--)
printf("%d",c[k]);
return 0;
}