java中BigInteger的%运算符

时间:2012-07-20 19:57:12

标签: java biginteger

如何使用大整数a%b? 像

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

boolean odd(val){
   if(val%2!=0)
      return true;
   return false;
...
Eclipse说,对于BigInteger,运算符%是未定义的。

有什么想法吗?

5 个答案:

答案 0 :(得分:20)

像这样:

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));
}

答案 1 :(得分:5)

更有效的方法是检查最后一位。如果是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

还有更少的代码行。

答案 2 :(得分:2)

我以这种方式使用BigInteger类的方法remainder

div

分配是由于BigInteger是不可变的,因此方法不会改变。

答案 3 :(得分:1)

使用val.mod(2)。

BigInteger是一个对象。你不能在对象上使用算术运算符,它只适用于基元。

%仅适用于java.lang.Integer,因为它是隐式转换(实际上,它被称为unboxed)到int。但BigInteger无法取消装箱。 unboxing / baxing(表示对象是原始/原始到对象的转换)只适用于int,float,double,short和byte。

答案 4 :(得分: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会自动将对象转换为其原始值(autoboxing)