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 回答
2

我会以这种方式使用 BigInteger 类的剩余方法:

BigInteger result = a.remainder(b);

赋值是因为 BigInteger 是不可变的,所以 a 不会被方法改变。

于 2017-01-02T11:54:08.017 回答
1

使用 val.mod(2)。

BigInteger 是一个对象。您不能在对象上使用算术运算符,这仅适用于原语。

% 仅适用于 java.lang.Integer,因为它被隐式强制转换(实际上,它被称为未装箱)为 int。但是 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 回答