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。
而第二份则没有问题。
求第一份错在哪里。