Java中的阶乘
我一直在为Java使用这个阶乘程序:Java中的阶乘,java,factorial,Java,Factorial,我一直在为Java使用这个阶乘程序: public static long factorial(int a) { if(a<1) { return 1; } long result=1; long x=a; while(x>1) { result*=x; x--; } return result; } 公共静态长阶乘(int a){ 如
public static long factorial(int a) {
if(a<1) {
return 1;
}
long result=1;
long x=a;
while(x>1) {
result*=x;
x--;
}
return result;
}
公共静态长阶乘(int a){
如果(a1){
结果*=x;
x--;
}
返回结果;
}
然而,它似乎“中断”并在25的阶乘后返回一个负数。它返回负数一段时间,然后只返回“0”
我做错了什么导致了这一点吗?您的
long
改用
biginger
。25!大于Long.MAX_值
..另一种不太简单且适用于非整数的方法是使用gamma函数的自然对数
如果您必须坚持使用此实现,我建议您研究备忘录。为什么要继续重新计算值?一旦你有了一个,就抓住它,在重复请求时就把它分发出去。
25!=155112100433309885984000000
Java中long的最大值是2^63-1=9223372036854775807
()
25岁!大约是Java中long可以存储的最大值的1.7*10^6。改用biginger
。检查,我知道标题指的是一个整数,但原则代表int、long、double等
简言之,一个基本数据类型有一个最大值,当您遍历该值时,它将环绕并再次启动。如果你真的想让它变得极客化,学习二进制加法来完全理解它。根据JLS,溢出(和下溢)是无声的,这就是为什么你的结果是“惊喜”的原因
你有两个选择:
- 如果需要精确答案,请使用BigInteger
- 如果不需要精确性,请使用
(即使这样也会溢出double
)170!
factorial of 1 can fit in a long!
factorial of 2 can fit in a long!
factorial of 3 can fit in a long!
factorial of 4 can fit in a long!
factorial of 5 can fit in a long!
factorial of 6 can fit in a long!
factorial of 7 can fit in a long!
factorial of 8 can fit in a long!
factorial of 9 can fit in a long!
factorial of 10 can fit in a long!
factorial of 11 can fit in a long!
factorial of 12 can fit in a long!
factorial of 13 can fit in a long!
factorial of 14 can fit in a long!
factorial of 15 can fit in a long!
factorial of 16 can fit in a long!
factorial of 17 can fit in a long!
factorial of 18 can fit in a long!
factorial of 19 can fit in a long!
factorial of 20 can fit in a long!
你知道最大数字和整数能容纳多少吗?这是你的家庭作业吗?这不是我的家庭作业,这是我有趣的工作:)(我是个极客)。我的家庭作业决不会像这样要求帮助。我不知道整数能容纳的最大数。我会在文档中查找它。我的不好,意思是长,但不管类型如何,原则都是成立的,检查一下,因为它很好地解释了会发生什么,可能重复的结果不会有帮助;它仍然会溢出。最终,但一个双人球会比一个长的球在那里停留更长的时间。而天然原木也会延迟它。对组合计算很有帮助:只需添加和减去自然日志。不错的页面,但过一会儿会让我头晕目眩!我在使用BigInteger时遇到了一些问题,我会在返回之前将long转换为BigInteger吗?@Toby-no,而不是
long result代码>,您将得到biginger结果您的乘法运算如下:result=result.multiply(biginger.valueOf(x))代码>@Toby:不客气。
factorial of 1 can fit in a long!
factorial of 2 can fit in a long!
factorial of 3 can fit in a long!
factorial of 4 can fit in a long!
factorial of 5 can fit in a long!
factorial of 6 can fit in a long!
factorial of 7 can fit in a long!
factorial of 8 can fit in a long!
factorial of 9 can fit in a long!
factorial of 10 can fit in a long!
factorial of 11 can fit in a long!
factorial of 12 can fit in a long!
factorial of 13 can fit in a long!
factorial of 14 can fit in a long!
factorial of 15 can fit in a long!
factorial of 16 can fit in a long!
factorial of 17 can fit in a long!
factorial of 18 can fit in a long!
factorial of 19 can fit in a long!
factorial of 20 can fit in a long!