0

X桁の大きな整数を生成しようとしています。以下のコードが数字ではなくビットを作成していることに気付くまで、私はそれを理解したと思っていました。私は、ビットではなく数字を作成する適切な方法を見つけようとしています。誰かが私を助けて正しい方向に向けることができますか? 私は今まで BigInteger を使用したことがありません。ああ、これは宿題の質問です。正確な答えではなく、助けを求めているのはそのためです。みんなありがとう。

BigInteger X = new BigInteger(23000, new Random());
BigInteger Y = new BigInteger(23001, new Random());
BigInteger result =  X.multiply(Y);
4

3 に答える 3

1

char の配列を作成したい場合があります。この配列の各項目は数字を保存します。そして、それを乗算するアルゴリズムを実装する必要があります。

宿題でより少ないメモリの使用を考慮する必要がある場合は、各文字を使用して 2 桁を格納するか、1 つの整数を使用して 9 桁を格納することができます。

于 2013-01-28T09:16:20.310 に答える
1

log2(10) =~ 3.321928したがって、23000 桁の 10 進数が必要な場合は、76404 ビット (23000*3.321928) を指定する必要があります。これにより、[0..10 23000 ]の間隔で数値が生成されることに注意してください。番号自体はおそらく 23000 桁にはなりません。

強制的に 23000 桁にしたい場合は、[ 0..10 22999 ] の範囲の数値を生成し、それに 10 22999を追加する必要があります。

于 2013-01-28T00:57:53.803 に答える
1

ここで使用しているのは、とBigIntegerを受け取り、からまでの範囲に一様に分布するを生成するのコンストラクタです。BigInteger Oracle Documentation を参照してください。宿題に役立ちます。intRandomBigInteger 0(2^(numBits) - 1)

編集:

次のことが少し役立つかもしれません: コンピュータは 0 と 1 の 2 つの数字しか認識しません。

それらはビットと呼ばれます。

8 ビットはオクテットを表します。

今日のほとんどのコンピューター システムでは、8 ビットも 1バイトを表します。

したがって、次の数: 底 2 (コンピューターが認識する基数) の 010 は、3 ビットで構成され、基数 10 (人々によって広く使用されています) では 3 に等しくなります。基数 10 の 4 は等しいです011 と 5 は 100 に等しくなります。

3 ビットを使用して数値を表すことは、0 から (2^(3) - 1)=7 の範囲の数値を表すことができると言っているのと同じです。つまり、3 ビットで 1 桁の数値を表すことができます。4 ビットを使用すると、0 から (2^(4) - 1)=15 の範囲の数値、つまり 2 桁の数値を表すことができます。

ここで、数字を数字で表すビット数を見つける方法を教えてくれる方法を考える必要がありますX

于 2013-01-28T00:33:29.933 に答える