我有一些方法可以找到大数的因子。有人可以解释一下,它有什么问题以及为什么我没有输出?
public static long factorial(long num) {
BigInteger numm = BigInteger.valueOf(num);
BigInteger fact= BigInteger.valueOf(1);
for (; numm.compareTo(BigInteger.ZERO)==1 ; fact = fact.multiply(numm)) {
numm.subtract(BigInteger.ONE);
}
return fact.longValue();
}
答案 0 :(得分:0)
我不认为你是如何写一个阶乘的。当你返回BigInteger
时,为什么要使用long
?所以,只需做出决定,long
或BigInteger
。我会选择BigInteger
,因为你说你想要操作非常大的数字。你应该使用递归来做析因。
public BigInteger factorial (BigInteger number) {
if (number.equals(BigInteger.ONE) || number.equals(BigInteger.ZERO)) {
return BigInteger.ONE;
}
return number.multiply(factorial(number.subtract(BigInteger.ONE)));
}
答案 1 :(得分:0)
您不能将减法值分配给numm
。这就是问题。
要继续使用代码,请使用num + 1
,因为for循环的最后一部分在减法后执行。所以,需要一次额外的迭代。
检查:
long num=5;
BigInteger numm = BigInteger.valueOf(num + 1);
BigInteger fact= BigInteger.valueOf(1);
for (; numm.compareTo(BigInteger.ONE)==1 ; fact = fact.multiply(numm)) {
numm = numm.subtract(BigInteger.ONE);
}
System.out.println(fact.longValue());