题目描述
计算两个大整数的和。大整数是指超过了c,c++表示范围的整数,如1234567890000000000000000000
输入
输入包括两个大整数,每个大整数不超过100位,用空格或者换行隔开
输出
输出两个大整数的和
样例输入 Copy
222222222222222222222
333333333333333333333
样例输出 Copy
555555555555555555555
#include"stdio.h"
int main()
{
char s1[100],s2[100],s3[100]={'0'};
int i,len1=0,len2=0,len3,j,k;
scanf("%s",s1);
scanf("%s",s2);
for(i=0;s1[i]!='\0';i++)
len1++;
for(i=0;s2[i]!='\0';i++)
len2++;
if(len1>=len2)
{
len3=len1+1;
k=len3-1;
s3[len3]='\0';
for(j=len2-1,i=len1-1;j>=0;i--,j--)
{
if(s3[k]+s1[i]+s2[j]-48<58)
{
s3[k]=s3[k]+s1[i]+s2[j]-48;
k--;
}
else
{
if(s3[k]!='1')
{
s3[k]=s3[k]+s1[i]+s2[j]-58;
s3[k-1]='1';
k--;
}
else
{
s3[k]=s3[k]+s1[i]+s2[j]-58-48;
s3[k-1]='1';
k--;
}
}
}
for(i=len1-len2-1;i>=0;i--)
{
if(s1[i]+s3[k]-48<58)
{
s3[k]=s3[k]+s1[i]-48;
k--;
}
else
{
s3[k]=s3[k]+s1[i]-58;
s3[k-1]='1';
k--;
}
}
}
else
{
len3=len2+1;
k=len3-1;
s3[len3]='\0';
for(j=len2-1,i=len1-1;i>=0;i--,j--)
{
if(s3[k]+s1[i]+s2[j]-48<58)
{
s3[k]=s3[k]+s1[i]+s2[j]-48;
k--;
}
else
{
if(s3[k]!='1')
{
s3[k]=s3[k]+s1[i]+s2[j]-58;
s3[k-1]='1';
k--;
}
else
{
s3[k]=s3[k]+s1[i]+s2[j]-58-48;
s3[k-1]='1';
k--;
}
}
}
for(i=len2-len1-1;i>=0;i--)
{
if(s2[i]+s3[k]-48<58)
{
s3[k]=s3[k]+s2[i]-48;
k--;
}
else
{
s3[k]=s3[k]+s2[i]-58;
s3[k-1]='1';
k--;
}
}
}
if(s3[0]!='0')
printf("%s",s3);
else
{
for(i=1;i<len3;i++)
{
printf("%c",s3[i]);
}
}
}