2012-07-20 94 views
9

如何使用大整数的a%b? 像%java中的BigInteger运算符

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

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

Eclipse中说,操作符%是未定义的BigInteger。

任何想法?

+3

看看BigInteger javadoc中的'mod'函数。 – 2012-07-20 19:59:25

回答

19

像这样:

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

或者作为用户邓肯的评论所说,我们可以完全取出的if语句,像这样:

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

如果val%2 == 0它的偶数,不奇怪。 – 2012-07-20 20:13:17

+0

谢谢,忘了感叹号。 – jrad 2012-07-20 20:15:01

+0

不需要if语句,只需要'return!val.mod(new BigInteger(“2”))。equals(BigInteger.ZERO);'。 – 2015-02-03 08:47:54

1

使用val.mod(2)。

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

%仅适用于java.lang.Integer,因为这是隐式强制转换(实际上称为unboxed)为int。但BigInteger无法拆箱。 unboxing/baxing(这意味着对象到基元/基元到对象的转换)只适用于int,float,double,short和byte。

2

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

我会使用类BigInteger的方法remainder这样:

BigInteger result = a.remainder(b); 

分配是由于事实的BigInteger是不变的,所以不会被方法改变。