2013-03-05 30 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)

相關問題