0

C では、次の簡単な操作を実行できます。

int a = b + c;

aが 2^32 より大きい場合 (または 2^31+1 の場合)、コードを次のように変更します。

long a = b + c;

また

unsigned long a = b + c;

しかし、次のような追加をどのように実装しますか?

bigint a = b + c;

ここで、bigint は、大きな整数 (数百桁の長さの数値) を格納および計算するためのある種のクラス/typedef/構造体です。小学校の標準的な手書きの小数アプローチを使用して数字を足し合わせようとしているだけの場合は、方程式で無限に長い数を実行できます。しかし、コンピュータ サイエンスに取り掛かると、無限に長い計算を実行できるバイナリの効率的なアプローチをどのように使用できますか (十分な RAM が利用可能である場合)。

もっとそう、ひどく遅くないこれを行う方法はありますか?

4

3 に答える 3

0

bigintライブラリを使用できます。または、本当に野心的な場合は、動的配列を作成して整数を格納できます。

于 2013-06-28T21:59:05.160 に答える
0

これを行うには非常に高速な方法があります (ただし、CPU レジスタでの計算よりも遅いですが、気をつけてください)。このためのライブラリはすでに存在しますが、実装の詳細に興味がある場合は、GMP ( http://gmplib.org/ )のソース コードを調べ、 Knuth のThe Art ofコンピューター プログラミング、第 2 巻: 半数値アルゴリズム

于 2013-06-28T21:59:52.647 に答える