给出2个大整数A,B,计算A+B的结果。
Input
第1行:大数A
第2行:大数B
(A,B的长度 <= 10000 需注意:A B有可能为负数)
Output
输出A + B
Sample Input
68932147586
468711654886
Sample Output
537643802472
#include<stdio.h>
#include<string.h>
#define MAX 10005
int main()
{
char a[MAX],b[MAX];
int c[MAX]={0};
int T;
int i,j,flag,flaga,flagb,singa,singb,f,n,m,t,k,p=0,s,len1,len2;
flag=0;flaga=0;flagb=0;singa=1;singb=1;t=0;i=0;j=0;f=0;k=0;
scanf("%s",a);
scanf("%s",b);
len1=n=strlen(a);
len2=m=strlen(b);
if(a[0]=='-'&&b[0]=='-')
{
flag=1;
flaga=flagb=1;
}
else if(a[0]=='-'||b[0]=='-')
{
if(a[0]=='-')
{
len1--;
flaga=1;
}
if(b[0]=='-')
{
len2--;
flagb=1;
}
if(len1>len2)
singb=-1;
else if(len1<len2)
singa=-1;
else
{
if(strcmp(&a[flaga],&b[flagb])>0)
singb=-1;
else if(strcmp(&a[flaga],&b[flagb])<0)
singa=-1;
else
{
printf("0\n");
return 0;
}
if(flaga==1&&singb==-1)
flag=1;
else if(flagb==1&&singa==-1)
flag=1;
}
}
//作比较
for(i=n-1,j=m-1;i>=flaga||j>=flagb;i--,j--)
{
if(i>=flaga&&j>=flagb)
c[k++]=(a[i]-'0')*singa+(b[j]-'0')*singb+t;
else if(i>=flaga&&j<flagb)
c[k++]=(a[i]-'0')+t;
else
c[k++]=(b[j]-'0')+t;
if(c[k-1]>9)
{
c[k-1]=c[k-1]%10;
t=1;
}
else if(c[k-1]<0)
{
c[k-1]=c[k-1]+10;
t=-1;
}
else
t=0;
}
if(t==1)
c[k]=t;
while(!c[k]&&k)
k--;
if(flag)
printf("-");
for(i=k;i>=0;i--)
printf("%d",c[i]);
printf("\n");
return 0;
}