2

私は、Java で BODMAS を実装する必要があり、オペランドが 1000 桁にもなるというシナリオに取り組んでいました。そこで、次の方法で実装することにしました - 中置式 (BODMAS が実装される式) を後置式に変換しました。次に、すべての BigInteger を解析して後置式を評価しました。この実装で成功しました。

今、私は BigInteger を使用できず、int、string などの基本的なデータ型を処理する必要があることを知りました。

どうすればこれを実現できるかを考えていましたが、率直に言って、大きな進展はありませんでした。

基本的なデータ型を使用して BigInteger を実装する方法に関するヘルプや提案は、非常に役立ちます。

4

2 に答える 2

2

大きな整数を実装する簡単な方法は、それらを 10 進数の配列として格納することです。1234 は次のように表すことができます。

int[] bignum = new int[] {1, 2, 3, 4};

手書きの加算、減算、乗算、除算など、必要なものをすべて実装する必要があります。

数値を「反転」して保存する方が簡単な場合があるため、1234 を次のように保存します。

int[] bignum = new int[] {4, 3, 2, 1};

より高度な実装では、基数 2^32 または基数 10 よりもはるかに大きいものを使用します。

于 2010-01-07T17:35:41.663 に答える
2

これは、 Open JDK からのBigIntegerの無料の実装です。GPL2でカバーされています(それは問題ですか?)

また、コピー&ペーストができなくても、int[] 配列にビットがどのように格納され、操作されるかを学ぶことができます。

別の方法として、CERN のcoltライブラリを使用することもできます。少なくとも、巨大なビット フィールドを処理できます。

編集

BODMASの意味を見つけた後(それは暗号アルゴリズムか何かであり、特別で限定されたJDKで実行する必要があると考えました;-)))、coltのアドバイスは適切ではないと思います;)

この回答は削除しませんが、p1NG には BigInteger の使用 (または再実装) に対する「法的」制限はないと思いますが...

于 2010-01-07T17:43:59.413 に答える