描述
求两个非负整数(1000位以内)的和。
输入
两个非负整数(1000位以内),以空格分隔。
输出
两个非负整数的和。
样例输入
111111111111 222222222222
样例输出
333333333333
提示
题目来源
GUOJ
//1011 还有很多可改进的地方
#include "stdio.h"
#include "string.h"
int main()
{
char Na[1002],Nb[1002];//以防进位
unsigned Ia[1002]={0},Ib[1002]={0};//将字符转化为数字存储处理 倒过来 刚好防止进位带的移位 然后逆序输出即是答案
int La,Lb;
int i;
int k=0;//进位标志符
scanf("%s%s",Na,Nb);
La=strlen(Na);
Lb=strlen(Nb);
for(i=0;i<La;++i)
{
Ia[La-i-1]=Na[i]-'0';
}
for(i=0;i<Lb;++i)
{
Ib[Lb-i-1]=Nb[i]-'0';
}
if(La<=Lb)
{
for(i=0;i<La;++i)
{
Ib[i]+=Ia[i];
}
for(i=0;i<Lb;++i)
{
if(Ib[i]>=10)
{
if(Lb-1==i)
{
Ib[i]=Ib[i]%10;
Ib[i+1]=1;
++k;
}
else
{
Ib[i]=Ib[i]%10;
Ib[i+1]+=1;
}
}
}
if(1==k)
{
for(i=Lb;i>=0;--i)
{
printf("%d",Ib[i]);
}
}
else
{
for(i=Lb-1;i>=0;--i)
{
printf("%d",Ib[i]);
}
}
}
else
{
for(i=0;i<Lb;++i)
{
Ia[i]+=Ib[i];
}
for(i=0;i<La;++i)
{
if(Ia[i]>=10)
{
if(La-1==i)
{
Ia[i]=Ia[i]%10;
Ia[i+1]=1;
++k;
}
else
{
Ia[i]=Ia[i]%10;
Ia[i+1]+=1;
}
}
}
if(1==k)
{
for(i=La;i>=0;--i)
{
printf("%d",Ia[i]);
}
}
else
{
for(i=La-1;i>=0;--i)
{
printf("%d",Ia[i]);
}
}
}
}