我想用c#計算2^1000(2的1000次冪)。我需要所有地方的價值。我一直在撓頭,因爲我似乎無法找到一種在c#中實現這一點的方法。計算非常大的整數
是否有某種類型的存儲數字超過300位數字,我錯過了? :)
感謝
我想用c#計算2^1000(2的1000次冪)。我需要所有地方的價值。我一直在撓頭,因爲我似乎無法找到一種在c#中實現這一點的方法。計算非常大的整數
是否有某種類型的存儲數字超過300位數字,我錯過了? :)
感謝
可以,但只能在.NET 4.0 - System.Numerics.BigInteger
。
如果您可以使用.NET 4.0,我會爲此而努力。否則,我確定有第三方庫。讓我知道你是否想讓我嘗試找到一些。
System.Numerics.BigInteger如果你在.NET 4.0(VS 2010)
或者是,尋找一個好的bigint實現在網絡上 - 有許多選擇。請參閱this StackOverflow question。
您可以使用數組來存儲您的數字。我知道這很麻煩,但基本上,除了在代碼中,您必須按照手動方式進行乘法編程。
有一個在這裏被稱爲 BigInt
該類型的問題非常有用的,而不.NET 4.0
類你可以只使用F#測試做到這一點,因爲這將在VS2008的工作,但對於一個生產應用程序,這將是一個問題。
看問題#25,http://blogs.msdn.com/mpeck/archive/2009/04/01/solving-problems-in-c-and-f-part-2.aspx,因爲它會顯示您可以使用的方法。
您的C#應用程序可以調用F#類,它們一起工作。
eh ...,2^0是第1位,2^1是第2位,...,2^4是第5位....你需要1000位。我不知道任何有關c#的知識,但是,如果僅僅記住按位符號是一個1的999 0而已?並相應地使用它。
你打算如何使用該號碼?
如果您可以使用IronRuby(不確定此刻有多可用),它會隱式轉換爲Bignum。例如:
2 ** 1000
給出: 107150860718626732094842504906000181056140...
哈哈StackOverflow只是讓數字離開頁面。至少,這就是它在我的瀏覽器上的樣子(FF 3.5) – AlbertoPL 2009-10-09 14:57:52
是的,對不起。將截斷。 – 2009-10-09 15:24:30
您可以參考添加到Java運行時(C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ vjslib.dll是我的本錢)和using java.math
,你得到一個BigInteger
現在他有兩個問題,解決問題並整合兩個框架 – Rodrigo 2009-10-09 15:31:45
你不必處理大部分的java,它只是一個類。它和所有其他BigInteger類一樣。 – 2009-10-09 16:08:54
如果你的目標是在歐拉問題上鍛鍊你的C#技能,那麼使用BigInt庫似乎毫無意義。如果你只需要2^1000的價值作爲解決另一個問題的一個步驟,那麼就是這樣。
10715086071862673209484250490600018105614048117055
33607443750388370351051124936122493198378815695858
12759467291755314682518714528569231404359845775746
98574803934567774824230985421074605062371141877954
18215304647498358194126739876755916554394607706291
4571196477686542167660429831652624386837205668069376
我知道這個問題很老,但它仍然被谷歌發現。 我有同樣的問題,我正在尋找一個庫來計算巨大(或小)的數字,不能用標準數據類型來表示。
所以我創建了一個新的數據類型,稱爲EDecimal
。使用這種數據類型,您可以使用任意大小和精度的數字進行計算。不要緊,如果數字有10位數字或1000000
你歐拉問題的工作?命中率可能是你不需要2^1000的全部價值。只記錄有用的東西(例如低20位數字) – pierrotlefou 2009-10-09 14:42:29
@pierr,是的,這實際上是歐拉問題!但是,我確實需要所有數字來解決這個問題。 – Mike 2009-10-09 14:57:10
我並沒有完成歐拉項目的大部分工作,但從我所見過的情況來看,它似乎要求這樣的大任務,所以你必須找到解決方案的捷徑。 但是,任何「任意精度」和/或「大整數」庫應該爲您處理。 – 2009-10-09 15:30:48