-1

Given a fraction (103993/33102), I need to find 50000 digits after the decimal point for this fraction.

Initially I used setprecision(k) in C++, but it gives only 17 digits after decimal point. I also tried

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

but the result is the same.

I need an algorithm that can solve this and which does not round off the digits after the decimal point i.e., it should be precise.

4

2 回答 2

3

解决此类问题的最佳方法是解决一个非常简单的问题,然后计算出算法。这样,您就不会感到困惑或失去自己的位置,并且无论问题如何,算法都是相同的。所以让我们来吧4/3

  1. 4 进入 3 一次。我们还剩 1 个。我们在1.它进入的时候输出 1。我们保留剩下的 1。

  2. 我们将剩下的 1 乘以 10 得到 10。3(我们的分母)乘以 10 三倍。还剩1个。

  3. 我们输出了,3因为它进入了 3 次。我们还剩下 1 个。

  4. 我们进入第 2 步并根据需要重复多次。

无论分子和分母如何,只要它们是正整数,相同的算法就可以简单地工作。

于 2013-03-05T05:27:57.020 回答
1

Float 或 double 不会这样做,因为它们不够精确。其他人建议使用 bignum 库。这可以做到,但还有另一种方法可以直接处理整数。

一种称为模幂的技术可以用来解决这个问题。这使您可以计算所有数字而不会遇到精度问题。

幸运的是,已经编写了如何执行此操作的答案:

从任何基数的比率展开中获取特定数字(x/y 的第 n 位)

于 2013-03-05T05:57:40.333 回答