找出大数的阶乘
Find a factorial of big numbers
我有一些方法可以找到大数的阶乘。有人可以解释一下,它有什么问题以及为什么我没有任何输出吗?
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();
}
我不认为你是这样写阶乘的。为什么在返回 long
时使用 BigInteger
?因此,只需做出决定,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)));
}
您没有将减法值分配给 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());
我有一些方法可以找到大数的阶乘。有人可以解释一下,它有什么问题以及为什么我没有任何输出吗?
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();
}
我不认为你是这样写阶乘的。为什么在返回 long
时使用 BigInteger
?因此,只需做出决定,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)));
}
您没有将减法值分配给 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());