2013-03-05 26 views
-1

给定小数点(103993/33102),我需要在该小数点的小数点后找到50000个数字。以精确的方式计算十进制小数并显示小数点后的数字

最初我在C++中使用了setprecision(k),但它在小数点后只有17位数。我也试过

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

但结果是一样的。

我需要一个算法,可以解决这个问题,它不会在小数点后的数字四舍五入,即它应该是精确的。

+2

你是认真问我们怎么办长除法?请告诉我,你不是一个不知道如何做长分的程序员。这是在四年级和五年级教!试试这个[数学很有趣](http://www.mathsisfun.com/long_division3.html)页面。我知道人们争论成为一名程序员需要多少高等数学,但需要知道如何做基本的算术应该是没有争议的! – 2013-03-05 05:07:47

+0

...我不知所措。 – 2013-03-05 05:08:48

+0

@DavidSchwartz:长分为50000位很难,我怀疑大多数编码人员可以在没有图书馆的情况下做到这一点。 (显而易见的答案是使用库) – 2013-03-05 05:18:10

回答

3

解决如何解决这个问题的最好方法是采取一个可笑的简单问题,并找出算法。这样,您不会感到困惑或失去自己的位置,而且无论问题如何,算法都是一样的。那我们来看看4/3

  1. 4进入3次一次。我们剩下1个。我们输出1.一次它进去。我们保留1剩下。

  2. 我们将剩余的1乘以10得到10. 3(我们的分母)进入10三次。剩下1个。我们输出3,因为它进行了三次。我们还剩下1个。

  3. 我们进入步骤2并重复我们需要的次数。

只要它们是正整数,这个算法就可以简单地工作而不管分子和分母。

1

float或double将不会这样做,因为它们不够精确。其他人建议使用一个bignum库。这可以完成,但有另一种方式直接与整数。

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

幸运的答案如何做到这一点已经写入:

Getting a specific digit from a ratio expansion in any base (nth digit of x/y)

相关问题