如何使用a%b
大整数?像
...
BigInteger val = new BigInteger("1254789363254125");
...
boolean odd(val){
if(val%2!=0)
return true;
return false;
...
Eclipse 说,对于 BigInteger,运算符 % 是未定义的。
有任何想法吗?
如何使用a%b
大整数?像
...
BigInteger val = new BigInteger("1254789363254125");
...
boolean odd(val){
if(val%2!=0)
return true;
return false;
...
Eclipse 说,对于 BigInteger,运算符 % 是未定义的。
有任何想法吗?
像这样:
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));
}
一种更有效的方法是检查最后一位。如果是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
它的代码行数也更少。
我会以这种方式使用 BigInteger 类的剩余方法:
BigInteger result = a.remainder(b);
赋值是因为 BigInteger 是不可变的,所以 a 不会被方法改变。
使用 val.mod(2)。
BigInteger 是一个对象。您不能在对象上使用算术运算符,这仅适用于原语。
% 仅适用于 java.lang.Integer,因为它被隐式强制转换(实际上,它被称为未装箱)为 int。但是 BigInteger 不能拆箱。拆箱/打包(这意味着对象到原始/原始到对象的转换)仅适用于 int、float、double、short 和 byte。
由于 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 会自动将对象转换为其原始值(自动装箱)