给出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
代码已AChttps://cn.vjudge.net/problem#OJId=All&probNum=&title=%E5%A4%A7%E6%95%B0&source=&category=all
/*原理:同号相加,异号 小置负 再加,符号单独处理,处理情况
1.同号相加最后一次进位
2.异号相减,去除首位0,但需考虑只有一个0的情况
#include<stdio.h>
#include<string.h>
#define max 10005
int add(char a[],char b[]);
int main()
{
char a[max],b[max];
scanf("%s%s",a,b);
add(a,b);
return 0;
}
int add(char a[],char b[])
{
int c[max]={0};
int flag=0,flaga=0,flagb=0,signa=1,signb=1;
int lena,lenb;
lena=strlen(a);
lenb=strlen(b);
if(a[0]=='-'&&b[0]=='-')//tong hao
{
flag=1;
flaga=flagb=1;//fu hao
}
else if(a[0]=='-'||b[0]=='-')//yi hao
{
if(a[0]=='-')
flaga=1;
else
flagb=1;
if(lena-flaga>lenb-flagb)//
signb=-1;
else if(lena-flaga<lenb-flagb)//xiao de zhi fu
signa=-1;
else
{
int k=strcmp(&a[flaga],&b[flagb]);
if(k>0)
signb=-1;
else if(k<0)
signa=-1;
else
{
printf("0\n");
return 0;
}
}
}
int i,j,k=0,t=0;//t jin zhi
for(i=lena-1,j=lenb-1;i>=flaga||j>=flagb;i--,j--)
{
if(i>=flaga&&j>=flagb)
c[k++]=(a[i]-'0')*signa+(b[j]-'0')*signb+t;
else
if(i>=flaga&&j<flagb)
c[k++]=(a[i]-'0')+t;
else
if(i<flaga&&j>=flagb)
c[k++]=(b[j]-'0')+t;
if(c[k-1]>9)
{
t=1;
c[k-1]-=10;
}
else if(c[k-1]<0)
{
t=-1;
c[k-1]+=10;
}
else
t=0;
}
if(t==1)
c[k++]=1;
while(!c[k]&&k) k--;
if(flaga&&signb==-1)
flag=1;
if(flagb&&signa==-1)
flag=1;
if(flag)
printf("-");
for(i=k;i>=0;i--)
printf("%d",c[i]);
printf("\n");
return 0;
}