【问题描述】请编程实现超长位数的大整数的加法运算。
【提示】
定义字符数组接收待相加的两个超长位数的大整数,然后进行单个字符与字符之间的相加,举例如下:
char x[1000],y[1000]; int sum, carry;
sum=carry+x[i]-'0'+y[i]-'0';
其中carry代表进位。
亦可使用结构体实现。
【样例输入】12587469874520145879333211125874698745201458793332111258746987452014587933321112587469874520145879333211
745201458793745201458793745201458793745201458793745201458793745201458793745201458793745201458793745201458793745201458793745201458793745201458793
【样例输出】745201458793745201458793745201458793745214046263619721604673078412584668443946660252538533570052492188910808333134779906332671333313891080792004
//大整数相加
#include<stdio.h>
#include<string.h>
int main()
{
char x[1001],y[1001];
int a[1001],b[1001],c[1001];//c用来保存结果
int lenx,leny,lena,lenb,lenc;
scanf("%s%s",x,y);
memset(a,0,sizeof(a));/全部赋值为0
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
//倒序
lenx=strlen(x);leny=strlen(y);
for(int i=0;i<lenx;i++) a[i]=x[lenx-i-1]-'\0';
lena=lenx;
for(int i=0;i<leny;i++) b[i]=y[leny-i-1]-'\0';len-i-1
lenb=leny;
if(lena>lenb) lenc=lena;
else lenc=lenb;
for(int i=0;i<lenc;i++)
{
c[i]=c[i]+a[i]+b[i];/c[i+1]用来保存进位
c[i+1]+=c[i]/10;
c[i]%=10;
}
lenc++;///接下来处理前导0的问题 例如0000012345+11111
while(c[lenc-1]==0)
{
if(lenc==1) break;///结果为一个0的情况退出
lenc--;
}
for(int i=lenc-1;i>=0;i--) printf("%d",c[i]);
return 0;
}