【发布时间】:2012-01-20 01:11:10
【问题描述】:
我是 Java 新手,只是用 BigInteger 编写程序。
public static void main(String[] args) {
BigInteger n = new BigInteger("5");
BigInteger i = new BigInteger("2");
while (lesserOrEqual(i,n) {
System.out.println("n.mod(i) = "+n.mod(i));
if (n.mod(i) == ZERO) {
n = n.divide(i);
}
else {
i.add(ONE);
}
System.out.println("n = "+n);
System.out.println("i = "+i);
}
public static boolean lesserOrEqual(BigInteger m, BigInteger n) `{
if (m.compareTo(n) == -1 || m.compareTo(n) == 0)
return true;
return false;
}
ZERO 和 ONE 分别定义为 BigInteger 0、1 类型。
我希望“i=2”除以“n=5”,如果“n mod i == 0”,否则“i++”,直到“n”小于或等于“i”。
我认为输出一定是
n.mod(i) = 1
n = 5
i = 3
n.mod(i) = 2
n = 5
i = 4
n.mod(i) = 1
n = 5
i = 5
n.mod(i) = 0
n = 1
i = 5
使用原始类型 int 的等效代码,我得到了预期的结果。
但是 BigInteger 会进入无限循环
n.mod(i) = 1
n = 5
i = 2
...
有人知道为什么会这样吗?
【问题讨论】:
标签: java biginteger