2009-10-09 14 views
6

私は2^1000(2の1000乗)をC#で計算しようとしています。私はすべての場所に価値が必要です。私はC#でこれを達成する方法を見つけることができないので、私はしばらく私の頭を掻いてきました。非常に大きな整数を計算する

タイプが300 +数字の長さを格納するタイプがありますか? :)

おかげ

+4

でそれを見ている場合は問題ではありませんか?ヒットはあなたが2^1000の全体のvauleを必要としないかもしれないということです。便利なものを記録してください(例えば、下位20個のデジタル数字) – pierrotlefou

+0

@pierr、これは実際にオイラーの問題でした!しかし、私はこの問題のためにすべての桁が必要でした。 – Mike

+1

私はプロジェクトオイラーの大半を通じて働いていないが、私が見てきたものから、意図的にこのような大きな仕事を求めるように見えるので、あなたが解決策へのショートカットを見つける必要があります。 しかし、はい、任意の「任意精度」および/または「大整数」ライブラリには、あなたのためにこれを処理する必要があります。 –

答えて

18

はい、唯一の.NET 4.0で - System.Numerics.BigInteger

.NET 4.0を使用することができれば、私はそれに行きます。さもなければ、私は周りに第三者図書館があると確信している。あなたが私に何かを見つけようとするかどうか私に教えてください。

+0

.NET 4.0を使用できるかどうかを確認します。ライブラリではなくむしろそうだろう。十分に簡単なのであれば? – Mike

+0

他の人のたくさんのように見えるが、今のライブラリへのリンクを掲載している:) –

+0

を彼らはそれを含めるために、フレームワークのバージョン4.0まで待っていました? JavaではJDK1.1以降xD – fortran

4

System.Numerics.BigIntegerあなたは(VS 2010)4.0 .NET

または、ウェブ上で良いbigint実装を探しになら - から選択することも多いです。

this StackOverflow questionも参照してください。

1

数字を格納するために配列を使用できます。それは面倒ですが、本質的には、コード内を除いて手で行うように乗算をプログラムする必要があります。

0

クラスは、あなただけのテストにはF#を使用することができ、ここで.NET 4.0せずに、問題のそのタイプのために非常に便利 BigInt

と呼ば

1

ありますがそれはVS2008で動作するよう、それを行うが、用生産アプリケーションでは問題になります。

問題25(http://blogs.msdn.com/mpeck/archive/2009/04/01/solving-problems-in-c-and-f-part-2.aspx)を参照してください。これは、使用できる方法を示しているためです。

C#アプリケーションはF#クラスを呼び出すことができますが、それらは連携して動作します。

0

eh ...、2^0は第1ビット、2^1は第2ビット、...、2^4は第5ビットです。これには1000ビットが必要です。私はC#について何も知りませんが、ビット単位の表記法が999 0と1の1を覚えているのはどうですか?それに応じてそれを使用してください。

この番号は何のために使用する予定ですか?

1

IronRubyを使用することができれば(現時点でどのくらい使用可能か分かりません)、Bignumへの暗黙的な変換が行われます。例:

2 ** 1000が与える: 107150860718626732094842504906000181056140...

+0

ハハStackOverflowは、数字をページから外すだけです。少なくとも、それは私のブラウザ(FF 3.5)のように見えるものです – AlbertoPL

+0

ええ、それについて申し訳ありません。切り詰めます。 –

0

をあなたはJavaランタイムへの参照を追加することができます(C:\ WINDOWS \ Microsoft.NET \ Frameworkの\ v2.0.50727ののの\ vjslib.dllは私が持っているものです) using java.mathの場合、BigInteger

+3

今、彼は2つの問題があり、問題を解決し、2つのフレームワークを統合します – Rodrigo

+0

あなたは本当にJavaの多くを扱う必要はありません、それは単なるクラスです。他のBigIntegerクラスと同様に動作します。 –

7

あなたの目標はオイラー問題でC#のスキルを発揮することで、BigIntライブラリを使用することは意味がないようです。もう1つの問題を解決するためのステップとして2^1000の値が必要な場合は、ここにあります。

10715086071862673209484250490600018105614048117055 
33607443750388370351051124936122493198378815695858 
12759467291755314682518714528569231404359845775746 
98574803934567774824230985421074605062371141877954 
18215304647498358194126739876755916554394607706291 
4571196477686542167660429831652624386837205668069376 
1

この質問はかなり古いですが、まだGoogleによって見つかっています。 私は同じ問題を抱えていましたが、標準のデータ型では表現できない巨大な(または小さな)数を計算するためのライブラリを探していました。

だから私はEDecimalと呼ばれる新しいデータ型を作成しました。このデータ型では、任意のサイズと精度の数値を使用して計算できます。番号が10桁または1000000

を持っているちょうどあなたがオイラーの問題に取り組んでいるhttps://github.com/anakonda3000/HyperMath/

関連する問題