5.6 大整数运算 A+B

对于位数超过整形的大整数的加法应该如何运算呢?就是模仿手算的过程。

参考代码:

#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;
}

猜你喜欢

转载自blog.csdn.net/qq_43590614/article/details/105200776