您的位置:首页 > 运维架构

openjudge计算概论-大整数加法

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

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

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

#include<stdio.h>
#include<string.h>
int main()
{
char a[203],b[203],c[203];
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=0;
i=lenA-1;
j=lenB-1;
k=max-1;
while(min>0)//注意:这里不能写min>=0
{
ai=a[i]-'0';
bi=b[j]-'0';
c[k]=(ai+bi+ci)%10+'0';
ci=(ai+bi+ci)/10;
i--;
j--;
k--;
min--;
}
if(lenA>lenB)
{
for(i=lenA-lenB-1;i>=0;i--)
{
c[i]=(a[i]-'0'+ci)%10+'0';
ci=(a[i]-'0'+ci)/10;
}
}
else if(lenB>lenA)
{
for(i=lenB-lenA-1;i>=0;i--)
{
c[i]=(b[i]-'0'+ci)%10+'0';
ci=(b[i]-'0'+ci)/10;
}
}
if(ci!=0)
{
printf("%c",ci+'0');
printf("%s",c);
f=false;
}
else
{
for(i=0;i<max;i++)
if(c[i]!='0')   break;
for(;i<max;i++)
{
f=false;
printf("%c",c[i]);
}
}
if(f)//注意:假如输入的两个数都是0,结果就应该是要输出0了。
printf("0");
printf("\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: