对于位数超过整形的大整数的加法应该如何运算呢?就是模仿手算的过程。
参考代码:
#include <cstdio>
#include <cstring>
struct bign{ //定义大整数结构体
int d[1000];
int len;
bign()
{
memset(d,0,sizeof(d));
len=0;
}
};
bign change(char str[])
{
bign a;
a.len=strlen(str);
for(int i=0;i<a.len;++i)
{
a.d[i]=str[a.len-i-1]-'0'; //倒着存储,方便从低位至高位枚举
}
return a;
}
bign add(bign a,bign b)
{
bign c;
int temp,carry=0; //carry 为进位
for(int i=0;i<a.len||i<b.len;++i)
{
temp=a.d[i]+b.d[i]+carry;
c.d[c.len++]=temp%10;
carry=temp/10;
}
if(carry!=0)
c.d[c.len++]=carry;
return c;
}
void print (bign c)
{
for(int i=c.len-1;i>=0;--i)
{
printf("%d",c.d[i]);
}
printf("\n");
}
char s1[1000],s2[1000];
int main()
{
while(scanf("%s%s",s1,s2)!=EOF)
{
bign a=change(s1);
bign b=change(s2);
bign c=add(a,b);
print(c);
}
return 0;
}