% 运算符

问题描述 投票:0回答:5

如何将

a%b
与大整数一起使用? 喜欢

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

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

Eclipse 表示 BigInteger 的运算符 % 未定义。

有什么想法吗?

java biginteger
5个回答
26
投票

像这样:

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

12
投票

更有效的方法是检查最后一位。
如果是

0
(又名函数
testBit(0)
将返回
false
,函数
odd(BigInteger)
将返回
true
),则数字为奇数,否则为偶数。

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

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

而且代码行数也更少。


2
投票

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

BigInteger result = a.remainder(b);

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


1
投票

使用 val.mod(2)。

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

% 仅适用于 java.lang.Integer,因为它被隐式转换(实际上,它被称为未装箱)为 int。但 BigInteger 无法拆箱。拆箱/装箱(即对象到基元/基元到对象的转换)仅适用于 int、float、double、short 和 byte。


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 会自动将对象转换为其原始值(自动装箱)

© www.soinside.com 2019 - 2024. All rights reserved.