【发布时间】:2012-04-13 20:48:40
【问题描述】:
可能重复:
Calculate the factorial of an arbitrarily large number, showing all the digits
这个问题在这里可能会被问一千次。我正在通过修改重复我的问题。我想计算一个大数的阶乘(max range of the number=10^6)。通常我们使用从i=1 到i=number 的for 循环,并且每次都将旧值乘以新值。这对小数字很好,但如果我有大数字怎么办? for 循环的范围现在增加了。 Java 原始数据类型int、long 无法处理生成的大数字。他们只是溢出。虽然我知道BigInteger 类,它可以处理这么大的输出,但for 循环仍然不适合我。有人可以建议我任何勾号,计算数字阶乘的任何技巧吗?以下是适用于小数字的简单程序-
public long getFactorial(long number) {
long factorial = 1;
for (long i = 1; i <= number; ++i) {
factorial *= i;
}
return factorial;
}
【问题讨论】:
-
1000000!是12,815,519数字长。你需要一个“真正的”bignum 库来处理它。 -
有基于链表/堆栈的解决方案来实现这一点。如this一
-
@Ravi Joshi:也许您应该澄清您是否需要一个精确的(BigInteger)答案,或者是否需要一个近似值。
-
@NedBatchelder:我需要准确的答案。因为接下来会使用这个结果值。
-
我严重怀疑您是否需要该号码。你可能认为你这样做了,但你很可能错了。这就是你所希望的那样天真的阶乘实现。没有 ln(gamma),没有记忆。你不会走得太远。
标签: java algorithm math factorial