大数加减

给出2个大整数A,B,计算A+B的结果。
Input
第1行:大数A
第2行:大数B
(A,B的长度 <= 10000 需注意:A B有可能为负数)
Output
输出A + B
Input示例
68932147586
468711654886
Output示例

537643802472


#include<stdio.h>
#include<string.h>
char a[10005],b[10005];
int c[100000]={0},d[100000]={0};
int jia(char a[],char b[],int x,int y)
{
int i;
for(i=0;i<x;i++)
c[x-i]=a[i]-'0';
for(i=0;i<y;i++)
d[y-i]=b[i]-'0';
for(i=1;i<x+y;i++)
{
c[i]+=d[i];
if(c[i]>=10)
{
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
}
}
int jian(char a[],char b[],int x,int y)
{
int i;
for(i=0;i<x;i++)
c[x-i]=a[i]-'0';
for(i=0;i<y;i++)
d[y-i]=b[i]-'0';
for(i=1;i<x+y;i++)
c[i]=c[i]-d[i];
for(i=1;i<x+y;i++)
{
if(c[i]<0)
{
while(c[i]<0)
{
c[i+1]=c[i+1]-1;
c[i]+=10;
}
}
}
}
int main()
{
int i,j,l,x,y;
scanf("%s",a);
scanf("%s",b);
x=strlen(a);
y=strlen(b);
if(a[0]=='-'&&b[0]!='-')
{
if(x-1>y)
{
a[0]='0';
printf("-");
jian(a,b,x,y);
}
else if(x-1<y)
{
a[0]='0';
jian(b,a,y,x);
}
else
{
a[0]='0';
if(strcmp(a+1,b)>0)
{
printf("-");
a[0]='0';
jian(a,b,x,y);
}
else if(strcmp(a+1,b)<0)
{
a[0]='0';
jian(b,a,y,x);
}
else
{
printf("0\n");
return 0;
}
}
}
else if(a[0]!='-'&&b[0]=='-')
{
if(y-1>x)
{
b[0]='0';
printf("-");
jian(b,a,y,x);
}
else if(y-1<x)
{
b[0]='0';
jian(a,b,x,y);
}
else
{
b[0]='0';
if(strcmp(a,b+1)>0)
{
b[0]='0';
jian(a,b,x,y);
}
else if(strcmp(a,b+1)<0)
{
printf("-");
b[0]='0';
jian(b,a,y,x);
}
else
{
printf("0\n");
return 0;
}
}
}
else if(a[0]=='-'&&b[0]=='-')
{
a[0]=b[0]='0';
printf("-");
jia(a,b,x,y);
}
else if(a[0]!='-'&&b[0]!='-')
{
jia(a,b,x,y);
}
l=x+y;
while(l>=1)
{
if(c[l]!=0)
break;
l--;
}
if(l<1)
{
printf("0\n");
return 0;
}

for(i=l;i>=1;i--)
printf("%d",c[i]);
return 0;
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值