この質問は、おそらくこのフォーラムやWebでも何度も聞かれていることを私は知っています。C ++で大きな整数の実装を作成するように求められますが、コンストラクターの1つが引数としてintを取る必要があるという制約があります...したがって、デフォルト以外のコンストラクターが複数あると思います。 。だから私の質問は、これを行う最も簡単な方法は何でしょうか?
1679 次
3 に答える
1
では、問題は「整数をビットのリストに変換するにはどうすればよいか」ということのようです。言い換えれば、整数の基数2の表現は何ですか?
これは宿題だと思われるので、10進数で考えて問題について話させてください。適切な変更は、いくつかの考えを持って明らかになるはずです。
基数10の数値が与えられると、右端の桁が何であるかを理解するのは非常に簡単です。10で割ったときの余りです。たとえば、n = 1234の場合、右端の桁はn%10=4です。次の右端の桁を取得するには、10で割って(123を取得)、プロセスを繰り返します。それで:
1234/10=123; 1234%10 = 4
123/10=12 ; 123%10 = 3
12/10=1 ; 12%10 = 2
1/10=0 ; 1%10 = 1
これで答えが得られました[4,3,2,1]。それらを逆にすると、番号の基数10桁が[1、2、3、4]になります。
于 2009-11-29T16:21:15.540 に答える
0
なぜ車輪を再発明するのですか?GNU MP ライブラリを使用します。
[編集] 宿題の匂いがする。したがって、BigBit
クラスがある場合は、次のようにします。
- すべてのビットをクリア
int
コンストラクターの引数のすべてのビットを処理するループを記述します。int
である引数の各ビットに対して、ベクトル!= 0
にビットを設定します。BigBit
于 2009-11-29T15:36:54.817 に答える
0
C++ BigInt クラス
C++ Big Integer Library
は、たとえば big int を書き込みます。
typedef struct {
int high, low;
} BiggerInt;
BiggerInt add( const BiggerInt *lhs, const BiggerInt *rhs ) {
BiggerInt ret;
/* Ideally, you'd want a better way to check for overflow conditions */
if ( rhs->high < INT_MAX - lhs->high ) {
/* With a variable-length (a real) BigInt, you'd allocate some more room here */
}
ret.high = lhs->high + rhs->high;
if ( rhs->low < INT_MAX - lhs->low ) {
/* No overflow */
ret.low = lhs->low + rhs->low;
}
else {
/* Overflow */
ret.high += 1;
ret.low = lhs->low - ( INT_MAX - rhs->low ); /* Right? */
}
return ret;
}
于 2009-11-29T15:43:57.433 に答える