数値の階乗を計算する問題を考えてみましょう。結果が 2^32 より大きい場合、オーバーフロー エラーが発生します。大きな数の階乗を計算するプログラムをどのように設計できますか?
編集: C++ 言語を使用していると仮定します。
EDIT2:これは重複した質問です
アルゴリズムがタグ付けされた質問として。アルゴリズムにオーバーフロー エラーが発生することはないため、2^32 は問題になりません。アルゴリズムの実装には、オーバーフロー エラーが発生する可能性があります。それで、あなたは何語を使っていますか?
ほとんどの言語には、使用できる BigNumber または BigInteger があります。
C++ BigInteger ライブラリは次のとおりです: https://mattmccutchen.net/bigint/
Google で検索することをお勧めします:c++ biginteger
これを行うには、いくつかのアプローチのいずれかを実行する必要がありますが、基本的には次のようになります。
そうすれば、配列内の各 int/element には位置の大きさがあり、最後につなぎ合わせて整数にすることができます。
C の良い例: http://www.go4expert.com/forums/c-program-calculate-factorial-t25352/
組み合わせの数を計算するなど、一部の目的では、階乗を階乗で除算し、最終結果がより適切なサイズになるため、階乗の対数を計算するだけで十分です。結果の指数。
対数を追加するか、 http://en.wikipedia.org/wiki/Gamma_functionを使用して、階乗の対数を計算できます。これは数学ライブラリでよく利用できます (これを概算する良い方法があります)。
このスクリプトをテストします。
import gmpy as gm
print gm.fac(3000)
数が非常に多いため、結果のストックや印刷が困難です。
まず、大きな数を格納して使用する方法を発明します。一般的な方法は、整数の配列を大きな数字の数字として解釈することです。次に、乗算などの基本演算をシステムに追加します。次に、乗算します。
または、すでに作成されたソリューションを使用します。Google for: C++ big integer ライブラリ