关于高精度减法
  • 板块学术版
  • 楼主Zxx200611
  • 当前回复1
  • 已保存回复1
  • 发布时间2020/12/11 21:01
  • 上次更新2023/11/5 06:16:31
查看原帖
关于高精度减法
175590
Zxx200611楼主2020/12/11 21:01

rt,两份不同,但好像都没有错的高精度减法在同一份高精度除法中输出不一样

第一份:

inline
Int operator - (Int a,Int b) //a>b
{
	Int c;
	c.clear();
	c.len=a.len;
	int x=0;
	for(int i=1;i<=c.len;i++)
	{
		c.num[i]=a.num[i]-b.num[i]+x;
		x=(c.num[i]-9)/10;
		c.num[i]=c.num[i]+(-x)*10;
	}
	while(c.len>0&&c.num[c.len]==0)
	{
		c.len--;
	}
	return c;
}

第二份:

inline
Int operator + (Int a,Int b)
{
	Int c;
	c.len=a.len;
	int x;
	for(int i=1;i<=c.len;i++)
	{
		if(a.num[i]<b.num[i])
		{
			a.num[i+1]-=1;
			a.num[i]+=10;
		}
		c.num[i]=a.num[i]-b.num[i];
	}
	while(c.len>0&&c.num[c.len]==0)
	{
		c.len--;
	}
	return c;
}

高精除:

inline
Int operator / (Int a,Int b)
{
	Int c;
	c.split(0);
	int idx=a.len-b.len;
	for(int i=idx+1;i>=1;i--)
	{
		Int th=b;
		th.mul10(i-1);
		Int x=th;
		while(x<a||x==a)
		{
			c.num[i]++;
			x=x+th;
		}
		// cout<<x<<"-"<<th<<"="<<x-th<<endl;
		// cout<<a<<"-("<<x<<"-"<<th<<")"<<"=";
		a=a-(x-th);
		// cout<<a<<endl;
	}
	c.len=idx+1;
	while(c.len>0&&c.num[c.len]==0)
	{
		c.len--;
	}
	return c;
}

第一份高精减版本的高精除在计算 348294/1 时输出的是 348293
而第二份则没有问题。
求第一份错在哪里。

2020/12/11 21:01
加载中...