2013-08-05 26 views
6

例えば、私は、50 +桁の長さの本当に大きな整数を節約する必要がある階乗プログラムを持っています。 C++の絶対最大プリミティブデータ型はで、最大値は18446744073709551615で、長さは20桁です。ここにC++の限界へのリンクがあります:非常に大きな数値を保存する方法は?

何よりも大きい数値を変数に格納するにはどうしたらいいですか?

+4

bigintライブラリを使用します。 GNU GMPはまずは良いことです。 –

答えて

11

すでにブースト依存関係を(これらの日が行うどの多くの人々)がある場合、あなたはブーストを使用することができますmulti-precision library 。実際には、すでに128ビットまでの出力をサポートすることができるfactorial programの例がありますが、これをさらに拡張することはかなり簡単です。

+0

そのことを指摘してくれた誇り、私はブーストが成長したことを知らなかった。 – dsign

6

bigintまたはbignumの実装を使用する必要があります。いくつかのライブラリは次のようにそこにあります。http://gmplib.org/

いくつかのより多くの情報とライブラリのリスト:http://en.wikipedia.org/wiki/Bignum

0

arrayを使用できます。まず、その巨数配列をコピーし、19桁の数字の後にコンマを使用してください:

unsigned long long int num[]= { 
     7316717653133062491,9225119674426574742,3553491949349698352,0,312774506326239578,3180169848018694788, 
     5184385861560789112,9494954595017379583,3195285320880551112,5406987471585238630,5071569329096329522, 
     7443043557668966489,5044524452316173185,6403098711121722383,1136222989342338030,8135336276614282806, 
     4444866452387493035,8907296290491560440,7723907138105158593,0,7960866701724271218,8399879790879227492, 
     1901699720888093776,6572733300105336788,1220235421809751254,5405947522435258490,7711670556013604839, 
     5864467063244157221,5539753697817977846,1740649551492908625,6932197846862248283,9722413756570560574, 
     9026140797296865241,4535100474821663704,8440319989000889524,3450658541227588666,8811642717147992444, 
     2928230863465674813,9191231628245861786,6458359124566529476,5456828489128831426,0,7690042242190226710, 
     5562632111110937054,4217506941658960408,0,7198403850962455444,3629812309878799272,4428490918884580156, 
     1660979191338754992,0,0,5240636899125607176,0,6058861164671094050,7754100225698315520,0,0, 
     5593572972571636269,5618826704282524836,0,0,8232575304207529634,50}; 
関連する問題