web-dev-qa-db-ja.com

非常に大きな数を保存する方法は?

たとえば、50以上の桁数の非常に大きな整数を保存する必要がある要因プログラムがあります。 C++の絶対最大プリミティブデータ型はunsigned long long int最大値18446744073709551615は20桁の長さです。 C++の制限へのリンクは次のとおりです。 http://www.cplusplus.com/reference/climits/

ある種の変数にそれよりも大きい数値を格納するにはどうすればよいですか?

13
Oleksiy

ブーストの依存関係が既にある場合(最近では多くの人がそうしています)、boost multi-precision library を使用できます。実際、128ビットまでの出力をサポートできる 階乗プログラム の例がすでにありますが、さらに拡張するのは非常に簡単です。

15
user220878

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

いくつかの詳細とライブラリのリスト: http://en.wikipedia.org/wiki/Bignum

7
Joe Junior

配列を使用できます。最初に、その巨大な数値配列をコピーし、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};
4
A.Najafi

非常に大きな数を保存するには、以下の多くの方法があります。

  1. ストリング
  2. ファイル
  3. リンクリスト
  4. ベクトル/動的配列

注:メモリの問題を回避するために配列を使用しないでください。

0
Jitendra Rajput