2012-09-02 25 views
1

我只是想知道在處理大數字時有什麼不同的分割策略。大數字,我的意思是〜50位數字。真的很大數字的分部

例如 9237639100273856744937827364095876289200667937278/8263744826271827396629934467882946252671

當這兩個數字都大了,長除法似乎失去了它的用處...

我認爲一種可能性是通過除數的乘法,直到你去紅利來算的,但如果它在上面的例子中,除以小數字的紅利,例如4,那麼這是一個巨大的計算量。

那麼,有沒有簡單,乾淨的方法來做到這一點?

+3

你可以只使用Python(1117851445),或者你可以具體談談在上下文你想解決這個問題。 –

+0

如果您對分割算法感興趣,可以免費下載[現代計算機算術](http://www.loria.fr/~zimmerma/mca/pub226.html)中介紹的幾種方法。我承認它可能有點慢,但那裏有很多好的信息。 – DSM

回答

2

你使用什麼語言/平臺?這很可能已經解決了,因此您不需要從頭開始實施它。例如。哈斯克爾有Integer類型,Java中的java.math.BigInteger類,.NET的System.Numerics.BigInteger結構等

如果您的問題真的是一個理論上的一個,我建議你閱讀克努特,計算機程序設計,第2卷,第4.3節的藝術。 1。你在找什麼叫做「算法D」。下面是算法的C實現用一個簡短的說明一起: http://hackers-delight.org.ua/059.htm

+0

我使用Obj-c,但我試圖創建自己的實現,而不是使用預先存在的實現 感謝您提及Knuth,您知道是否有方法在線閱讀該節,或者我需要去圖書館嗎? – Mirror318

+0

您可能會在Google書籍上運氣(在本書的算法從第273頁開始)。但是,如果你只是搜索: - 第十章「算法d」 - 你會發現一些例子和解釋,如我在上面的鏈接中的一個。 – Tilo

+0

第二個想法:如果你從來沒有閱讀過Knuth,請先看網頁。例如,Kunth使用僞彙編而不是您習慣於其他算法書籍的僞代碼。 – Tilo

1

Long division如果您使用數字的二進制表示形式並且可能是最有效的算法,則不是很複雜。

-1

如果你不需要非常精確的結果,可以使用對數和指數。 指數是函數f(x)= e^x,其中e是等於2.71828182845的數學常數...
對數(用ln標記)是指數的倒數。

由於LN(A/B)= LN(一)-ln(b)中,爲了計算A/B,你需要:
LN計算的(a)和ln(b)中[通過庫函數,對數表或其他方法]
substruct他們:TEMP = LN(一)-lb(b)
計算指數e ^臨時

+0

我需要一個確切的結果:\ 雖然我可以砍掉小數/餘數,但我需要精確的數字四捨五入到最接近的整數 – Mirror318

+0

Whell,在數學上它是確切的,買問題是ln(a)abd ln(b)必須四捨五入。 – LeeNeverGup

+0

在你的例子中,實際結果是1117851445. ln(a)接近112.747,ln(b)接近91.912。 e ^差值給出1118215558.點後的5位數字的相同過程給出1117857786,點後9位給出實際結果。 – LeeNeverGup