/*在C中不同Java中有BigInteger类,可以计算很大的数,所以为了解决这个问题我们可以模拟手算,一位一位的相加:*/
#include<stdio.h>
#include<string.h>
void main()
{
char a[1024]={0},b[1024]={0};
int c[1026]={0};//保存结果的数组
gets(a);
gets(b);
int len1 = strlen(a);
int len2 = strlen(b);
int min = len1<len2?len1:len2;
int max = len1<len2?len2:len1;
int temp = 0;//进位的位数
int j=0;//c的数组下标
for(int i=max-1;i>=0;i--)//首先从长度较长的最后一位(也就是个位数)相加
{
int num1,num2;
if(len1>len2)
{
if(i-len1+len2>=0)
{
num1 = a[i]-'0';//减去'0',得到Int值,后面类似
num2 = b[i-len1+len2]-'0';//取得较短的字符的最后一位(也就是个位数)
}
else//当较短的字符串取完了,就可以将num2直接赋值为0了
{
num1 = a[i]-'0';
num2 = 0;
}
}
else
{
if(i-len2+len1>=0)
{
num1 = b[i]-'0';
num2 = a[i-len2+len1]-'0';
}
else
{
num1 = b[i]-'0';
num2 = 0;
}
}
int sum = num1 + num2 +temp;
c[j++] = sum%10;
temp = sum/10;
}
c[j] = temp;//最后注意可能有进位的情况,所以需要再进一位
int start = 0;
for(int k=1026-1;k>=0;k--)
{
if(c[k]>0)
{
start = k;//得到数组从那一位开始存了数字
break;
}
}
for(int m=start;m>=0;m--)//开始打印
{
printf("%d",c[m]);
}
printf("\n");
}