BigInteger Modulo'%'操作&少于/多于操作

时间:2013-03-01 15:52:36

标签: java operators long-integer biginteger modulo

嗨我有一个算法,我需要将操作应用到BigInt。

我知道可以使用Maths类操作BigInt,例如:

import java.math.*;

BigInteger a;
BigInteger b = BigInteger.ZERO;
BigInteger c = BigInteger.ONE;
BigInteger d = new BigInteger ("3");
BigInteger e = BigInteger.valueOf(5);

a.multiply(b);
a.add(b);
a.substract(b);
a.divide(b);

我需要能够申请超过一段时间的条件,例如

while (a > 0) {

这给了我一个语法错误,说“二元运算符的错误操作数类型'>',第一种类型:java.math.BigInteger,第二种类型:int。

我还需要能够将modulo(%)运算符应用于BigInteger。

b = a % c;

有人可以建议这样做吗?

如果没有解决方案,那么我将不得不以某种方式使用reduce函数将我的BigInteger操作为一个独特的Long(这远非理想)。

Silverzx。

2 个答案:

答案 0 :(得分:6)

要比较BigInteger,请使用BigInteger.compareTo

while(a.compareTo(BigInteger.ZERO) > 0)
    //...

对于模数(%),请使用BigInteger.mod

BigInteger blah = a.mod(b);

答案 1 :(得分:0)

为了比较BigIntegers,您可以使用compareTo,但在特殊情况下,当您与0比较时,signum方法也可以完成工作(并且可能会更快一些)。至于获取给定除法的余数,您可以使用方法mod(这里更好的选项)或者使用divideAndRemainder,它返回一个包含除法结果和余数的数组。