2009-10-09 61 views
6

我想用c#計算2^1000(2的1000次冪)。我需要所有地方的價值。我一直在撓頭,因爲我似乎無法找到一種在c#中實現這一點的方法。計算非常大的整數

是否有某種類型的存儲數字超過300位數字,我錯過了? :)

感謝

+4

你歐拉問題的工作?命中率可能是你不需要2^1000的全部價值。只記錄有用的東西(例如低20位數字) – pierrotlefou 2009-10-09 14:42:29

+0

@pierr,是的,這實際上是歐拉問題!但是,我確實需要所有數字來解決這個問題。 – Mike 2009-10-09 14:57:10

+1

我並沒有完成歐拉項目的大部分工作,但從我所見過的情況來看,它似乎要求這樣的大任務,所以你必須找到解決方案的捷徑。 但是,任何「任意精度」和/或「大整數」庫應該爲您處理。 – 2009-10-09 15:30:48

回答

18

可以,但只能在.NET 4.0 - System.Numerics.BigInteger

如果您可以使用.NET 4.0,我會爲此而努力。否則,我確定有第三方庫。讓我知道你是否想讓我嘗試找到一些。

+0

我將會看看是否可以使用.NET 4.0。會比圖書館多得多。如果很容易? – Mike 2009-10-09 14:49:17

+0

看起來像很多其他人已經發布鏈接到圖書館現在:) – 2009-10-09 15:03:11

+0

他們一直等到框架的版本4.0包括?在Java中它自JDK1.1起xD – fortran 2009-10-09 15:40:38

4

System.Numerics.BigInteger如果你在.NET 4.0(VS 2010)

或者是,尋找一個好的bigint實現在網絡上 - 有許多選擇。請參閱this StackOverflow question

1

您可以使用數組來存儲您的數字。我知道這很麻煩,但基本上,除了在代碼中,您必須按照手動方式進行乘法編程。

0

有一個在這裏被稱爲 BigInt

該類型的問題非常有用的,而不.NET 4.0

0

eh ...,2^0是第1位,2^1是第2位,...,2^4是第5位....你需要1000位。我不知道任何有關c#的知識,但是,如果僅僅記住按位符號是一個1的999 0而已?並相應地使用它。

你打算如何使用該號碼?

1

如果您可以使用IronRuby(不確定此刻有多可用),它會隱式轉換爲Bignum。例如:

2 ** 1000給出: 107150860718626732094842504906000181056140...

+0

哈哈StackOverflow只是讓數字離開頁面。至少,這就是它在我的瀏覽器上的樣子(FF 3.5) – AlbertoPL 2009-10-09 14:57:52

+0

是的,對不起。將截斷。 – 2009-10-09 15:24:30

0

您可以參考添加到Java運行時(C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ vjslib.dll是我的本錢)和using java.math,你得到一個BigInteger

+3

現在他有兩個問題,解決問題並整合兩個框架 – Rodrigo 2009-10-09 15:31:45

+0

你不必處理大部分的java,它只是一個類。它和所有其他BigInteger類一樣。 – 2009-10-09 16:08:54

7

如果你的目標是在歐拉問題上鍛鍊你的C#技能,那麼使用BigInt庫似乎毫無意義。如果你只需要2^1000的價值作爲解決另一個問題的一個步驟,那麼就是這樣。

10715086071862673209484250490600018105614048117055 
33607443750388370351051124936122493198378815695858 
12759467291755314682518714528569231404359845775746 
98574803934567774824230985421074605062371141877954 
18215304647498358194126739876755916554394607706291 
4571196477686542167660429831652624386837205668069376 
1

我知道這個問題很老,但它仍然被谷歌發現。 我有同樣的問題,我正在尋找一個庫來計算巨大(或小)的數字,不能用標準數據類型來表示。

所以我創建了一個新的數據類型,稱爲EDecimal。使用這種數據類型,您可以使用任意大小和精度的數字進行計算。不要緊,如果數字有10位數字或1000000

只是看看它在https://github.com/anakonda3000/HyperMath/