-1

分数(103993/33102)を指定すると、この分数の小数点以下 50000 桁を見つける必要があります。

最初setprecision(k)は C++ で使用しましたが、小数点以下 17 桁しか表示されません。私も試しました

sprintf (str, "%.500000f", num)

しかし、結果は同じです。

これを解決でき、小数点以下を四捨五入しないアルゴリズムが必要です。つまり、正確でなければなりません。

4

2 に答える 2

3

このような問題を解決する方法を見つける最良の方法は、途方もなく簡単な問題を取り上げて、そのアルゴリズムを理解することです。そうすれば、混乱したり場所を失ったりすることはなく、アルゴリズムは問題に関係なく同じです。だから取りましょう4/3

  1. 4は1回3になります。残り1個です。一度入ったものを出力1.します。残りの1つはそのままにしておきます。

  2. 残った1に10を掛けて、10を求めます。3(分母)は10に3回入ります。1つ残っています。

  3. 33回入ったので出力しました。まだ1つ残っています。

  4. 手順2に進み、必要な回数だけ繰り返します。

この同じアルゴリズムは、分子と分母が正の整数である限り、分子と分母に関係なく、これだけで機能します。

于 2013-03-05T05:27:57.020 に答える
1

float や double は精度が十分でないため、実行できません。bignum ライブラリの使用を提案する人もいます。これは実行できますが、整数を直接操作する別の方法があります。

この問題を解決するには、累乗剰余と呼ばれる手法を使用できます。これにより、精度の問題に遭遇することなく、すべての桁を計算できます。

幸いなことに、これを行う方法の答えはすでに書かれています:

任意の基数 (x/y の n 桁目) での比率展開から特定の桁を取得する

于 2013-03-05T05:57:40.333 に答える