2010-01-03 54 views
6

如何乘兩個超過32個字符的非常大的數字,例如乘以100!與122!或22^122與11^200的分而治之幫助下,任何機構都有java代碼或C#代碼嗎?超大整數的快速乘法

+0

已使用相關語言 – 2010-01-03 22:50:57

+0

閱讀乘法算法:http://en.wikipedia.org/wiki/Multiplication_algorithm – przemoc 2010-01-03 22:52:14

+0

「分而治之」聽起來像是家常ķ。請正確填寫。 – 2010-01-03 23:15:54

回答

0

我寫了一個自己使用數組來完成這一切,只是爲了好玩。我相信Java的BigInteger類會做同樣的事情。

Here是C#中的一個示例,可能對您有用。

3

您應該使用java.math.BigInteger。這允許表示整數值遠遠超過2^32或甚至2^64。 BigInteger值本質上僅受程序可用內存量的限制,即32位系統上的〜4 GB以及64位系統的可用物理+虛擬內存。

import java.math.BigInteger; 

class Foo 
{ 
    public static void main(String args[]) 
    { 
     BigInteger bigInteger100Fact = bigFactorial(BigInteger("100")); //where bigFactorial is a user-defined function to calculate a factorial 
     BigInteger bigIntegerBar = new BigInteger("12390347425734985347537986930458903458"); 

     BigInteger product = bigIntegerFact.multiply(bigIntegerBar); 
    } 
} 

編輯:這裏有一個BigInteger factorial function,如果你需要一個

+0

是的,並且對於C#考慮intX,http://www.codeplex.com/IntX/ – 2010-01-04 00:02:44

+2

請注意,BigInteger使用的是天真的乘法算法,因此如果需要快速乘法大數,你應該使用一個使用Karatsuba或者另一個子n^2算法的第三方庫。 – Voo 2011-11-06 01:08:53