2011-07-20 11 views
1

nとkを使ってn個の問題を解決する必要があるタスクが与えられました。 私が持っている状態はint以外の他のデータタイプを使うことができないということです。 BigIntegerなどのパッケージを使用できません。
int nおよびkは、200未満の任意の数値にすることができます。 数値が大きくなり過ぎるのを避けるにはどうすればよいですか?プログラムはn > 20のときに吹きます。
ありがとうございます。n整数型のnとkをjavaで選択する

ウィキペディア"n Choose k" or "Binomial coefficient"

+0

できません。インツは大きな数字を保持することはできません、それがすべて使えればそれだけです。あなたがintの配列を使うことができるなら、それは実行可能ですが、PITAです。整数のコレクションはうまく動作しますが、技術的なintではありません。 2番目の考えでは、単純にnの表現を階​​乗式でkを選んで出力することができます。しかし、それはおそらくインストラクターが意図するものではありません。 – bdares

+0

この宿題はありますか? –

+0

@Manuel Selva明らかに、それは –

答えて

1

私はこの問題は、膨大な数を表す膨大な数やalteastを保持することができ、独自のデータ構造を作成する必要がありますと思います。それが済むと、残りは簡単です。 BigIntegerのソースコードを見て、その動作を確認することができます。

+0

これも私が思ったことですが、彼はint以外のものを使うことは許されていないと指定しました。これはかなり具体的で、オブジェクト型を許可しません。 – bdares

3

使用再帰関係:(N、K)=(N-1、K-1)+(N-1、K)

ベースケース(N、0)= 1。 (0、k)= 0

+0

@abhこれは、大きな数値 –

+1

+1のオーバーフローを引き起こします。これは、解決策を可能な限り低く保つ簡単な方法です。最終的な解がint.MaxValueより大きい場合、解はありません。 –

+0

@ Scorpi0:ええ、宿題はおそらく再帰を学習するためのものです。 1つの方法は、付加的に文字列を出力することです:(200,100)= 1 + 0 + 0 + 1 + 0 + ...そして、それはコンソールをオーバーフローさせます:)) –

関連する問題