みんな私は学習目的で LINT (large int) と呼ばれるクラスに取り組んでいますが、知るまではすべてうまくいきました。operator/(const LINT&) の実装に行き詰まっています。ここでの問題は、LINT を LINT で除算したいときに、再帰的な fnc 呼び出しが発生することです。つまり、次のようになります。
//unfinished
LINT_rep LINT_rep::divide_(const LINT_rep& bottom)const
{
typedef LINT_rep::Iterator iter;
iter topBeg = begin();
iter topEnd = end();
iter bottomBeg = bottom.begin();
iter bottomEnd = bottom.end();
LINT_rep topTmp;//for storing smallest number (dividend) which can be used to divide by divisor
while (topBeg != topEnd)
{
topTmp.insert_(*topBeg);//Number not large enough add another digit
if (topTmp >= bottom)
{//ok number >= we can divide
LINT_rep topShelf = topTmp / bottom;//HERE I'M RUNNING INTO TROUBLE
}
else
{
}
++topBeg;
}
return LINT_rep("-1");//DUMMY
}
私がやろうとしているのは、これらの数値を手で割るかのようにこれを実装することです。たとえば、被除数 1589 と除数 27 の場合、次のようになります。
- 最初の桁が>=除数であるかどうかを確認し、そうであれば除算します
- そうでない場合は、最初の桁に別の桁を追加し、a > b かどうかを確認します
ある時点で(単純化されたシナリオでは)大きくなり、そうであれば分割する必要がありますが、この場合、再帰呼び出しに遭遇していて、それを壊す方法がわかりません。
1 つの注意: tmp として、たとえば int の代わりに LINT を使用する必要があります。これらの数値は int に適合しないためです。
それで、一般的に私が求めているのは、除算を行う他の方法はありますか? または、私の考えに誤った論理があるのかもしれません (かなり可能性があります)。ありがとうございました。