BigInteger 取模 '%' 运算 & 小于 / 大于 运算

4

您好,我需要对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。”

同时,我也需要能够对BigInteger应用模运算(%)操作。

b = a % c;

有人能提供一种实现这个的方法吗?

如果没有解决方案,那么我只能使用reduce函数将我的BigInteger转换为唯一的Long来进行操作(这远非理想)。

Silverzx。


2
BigInteger.compareToBigInteger.mod - Alvin Wong
太好了,我现在会搜索一下,想不出如何使用compareTo,但.mod是有道理的!非常感谢! - silverzx
@AlvinWong,你应该把它作为一个答案加入进去。 - RudolphEst
2个回答

8

如果需要比较BigInteger,请使用BigInteger.compareTo方法。

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

对于取模运算(%),请使用BigInteger.mod函数。

BigInteger blah = a.mod(b);

0

如果要比较BigIntegers,您可以使用compareTo,但在特殊情况下,当您与0进行比较时,signum方法也可以完成任务(并且可能会更快)。至于取给定除法的余数,您可以使用mod方法(这里是更好的选项),或者使用divideAndRemainder方法,该方法返回一个数组,其中包含除法和余数的结果。


我不明白如何使用.compareTo方法来检查BigInt是否大于零。是这样吗?BigInteger n = "2712598012958912580129859"; BigInteger zero = BigInteger.ZERO; while (n.compareTo(zero) > 0) { - silverzx
@silverzx 没错。或者按照我建议的:while (n.signum() > 0) 顺便提一下,在你提供的解决方案中,你不需要 zero,只需在循环中使用 BigInteger.ZERO 即可。 - Ivaylo Strandjev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接