openjudge计算概论-大整数加法

时间:2023-03-08 22:07:40
openjudge计算概论-大整数加法

/*=====================================================================
1004:大整数加法
总时间限制: 1000ms 内存限制: 65536kB
描述
求两个不超过200位的非负整数的和。

输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555

解析:要注意输入的两个数都是0的情况需要特殊处理输出结果的过程。
=======================================================================*/

#include<stdio.h>
#include<string.h>
int main()
{
char a[],b[],c[];
int lenA,lenB,min,max,i,j,k;
int ai,bi,ci;
bool f=true;
freopen("add.in","r",stdin);
//freopen("add.out","w",stdout);
gets(a);
gets(b);
lenA=strlen(a);
lenB=strlen(b);
max=(lenA>lenB?lenA:lenB);
min=(lenA<lenB?lenA:lenB);
c[max]='\0';
ci=;
i=lenA-;
j=lenB-;
k=max-;
while(min>)//注意:这里不能写min>=0
{
ai=a[i]-'';
bi=b[j]-'';
c[k]=(ai+bi+ci)%+'';
ci=(ai+bi+ci)/;
i--;
j--;
k--;
min--;
}
if(lenA>lenB)
{
for(i=lenA-lenB-;i>=;i--)
{
c[i]=(a[i]-''+ci)%+'';
ci=(a[i]-''+ci)/;
}
}
else if(lenB>lenA)
{
for(i=lenB-lenA-;i>=;i--)
{
c[i]=(b[i]-''+ci)%+'';
ci=(b[i]-''+ci)/;
}
}
if(ci!=)
{
printf("%c",ci+'');
printf("%s",c);
f=false;
}
else
{
for(i=;i<max;i++)
if(c[i]!='') break;
for(;i<max;i++)
{
f=false;
printf("%c",c[i]);
}
}
if(f)//注意:假如输入的两个数都是0,结果就应该是要输出0了。
printf("");
printf("\n");
return ;
}