找出大数的阶乘

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?因此,只需做出决定,longBigInteger。我会选择 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());