C での BigInt クラスの実装
C では、long int より大きい数値を処理する場合、カスタム " big int」クラス。これらの概念をより深く理解するには、外部実装に依存する代わりに、独自の実装を作成することを検討してください。
データ構造
単純なアプローチには、数値を文字列として保存することが含まれます。 、それをより小さな数値(数字など)に分割し、配列に配置します。これにより、比較演算が簡略化されますが、加算や乗算などの演算に関して懸念が生じます。
アルゴリズムの概要
これらの演算では、整数の 2 進数の性質を考慮することが有益です。例として加算演算子 (=) を実装し、各数字のペアを反復処理して加算します。結果が BaseType をオーバーフローした場合は、超過分を次の桁に繰り越します。
コード例
template< class BaseType > BigInt< BaseType >& BigInt< BaseType >::operator += (BigInt< BaseType > const& operand) { BT count, carry = 0; for (count = 0; count < std::max(value_.size(), operand.value_.size(); count++) { BT op0 = count < value_.size() ? value_.at(count) : 0, op1 = count < operand.value_.size() ? operand.value_.at(count) : 0; BT digits_result = op0 + op1 + carry; if (digits_result-carry < std::max(op0, op1) { BT carry_old = carry; carry = digits_result; digits_result = (op0 + op1 + carry) >> sizeof(BT)*8; // NOTE [1] } else carry = 0; } return *this; }
実装ノート
その他演算子
減算、乗算、除算に対してこのアルゴリズム的アプローチを繰り返します。 << のような標準演算子を実装します。出力の場合は <
結論
カスタム BigInt クラスの構築は、難しいですがやりがいのある作業です。ここで説明する手順に従うと、C で任意の大きな整数を処理する機能的で効率的なクラスを実装することができます。
以上が任意の大きな整数を処理するために C で BigInt クラスを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。