13

a%b大きな整数で使用する方法は? お気に入り

...
BigInteger val = new BigInteger("1254789363254125");
...

boolean odd(val){
   if(val%2!=0)
      return true;
   return false;
...

Eclipse によると、演算子 % は BigInteger に対して未定義です。

何か案は?

4

5 に答える 5

25

このような:

BigInteger val = new BigInteger("1254789363254125");
public boolean odd(BigInteger val) {
    if(!val.mod(new BigInteger("2")).equals(BigInteger.ZERO))
        return true;
    return false;
}

または、ユーザー Duncan がコメントで提案したように、次のように if ステートメントを完全に取り出すことができます。

BigInteger val = new BigInteger("1254789363254125");
public boolean odd(BigInteger val) {
    return !val.mod(new BigInteger("2")).equals(BigInteger.ZERO));
}
于 2012-07-20T19:59:29.473 に答える
12

より効率的な方法は、最後のビットをチェックすることです。0(別名) の場合falseは偶数、それ以外の場合は奇数です。

public boolean odd(BigInteger i){
    return i.testBit(0);
}

odd(BigInteger.valueOf(1));//true
odd(BigInteger.valueOf(2));//false
odd(BigInteger.valueOf(101));//true
odd(BigInteger.valueOf(100));//false

また、コード行が少なくなります。

于 2016-12-14T20:52:48.117 に答える
1

val.mod(2) を使用します。

BigInteger はオブジェクトです。プリミティブでのみ機能する算術演算子をオブジェクトに使用することはできません。

% は int に暗黙的にキャストされる (実際には unboxed と呼ばれる) ため、java.lang.Integer でのみ機能します。ただし、BigInteger はアンボックスできません。アンボックス化/バクシング (つまり、オブジェクトからプリミティブへの変換/プリミティブからオブジェクトへの変換を意味します) は、int、float、double、short、および byte でのみ機能します。

于 2012-07-20T19:59:24.957 に答える
1

BigInteger はクラスであり、プリミティブではありません*1ので、演算子は使用しません。BigInteger のメソッドを確認してください: http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigInteger.html#mod(java.math.BigInteger )

*1: Integer、Float の場合、JVM がオブジェクトをプリミティブ値に自動的に変換するため (オートボクシング)、演算子を使用できます。

于 2012-07-20T20:00:23.377 に答える