java中非整数值的阶乘

java中非整数值的阶乘,java,factorial,Java,Factorial,5!=5*4*3*2*1. 我对此没有问题。但我注意到,在我的程序中,如果我输入3.5!它将返回一个定义的数字 你如何计算它们 我的程序中有类似的东西 public class fact { public static void main(String args[]) { double factorial=1; System.out.println("Type a number"); double number= sc.nextDouble(); /*I

5!=5*4*3*2*1.

我对此没有问题。但我注意到,在我的程序中,如果我输入3.5!它将返回一个定义的数字

你如何计算它们

我的程序中有类似的东西

 public class fact {
   public static void main(String args[]) {
     double factorial=1;
     System.out.println("Type a number");
     double number= sc.nextDouble(); /*I am using scanner*/
     while (number !=0 ){
       factorial = factorial * number;
       number--;
     }
     System.out.println(factorial);
   }
 }
事实是:阶乘对于整正数非常简单

这个概念也可以应用于浮点数,但可以考虑其背后的数学原理

所以:退一步;理解概念背后的数学;在实施概念之前

换言之;您必须决定是否要将程序更改为使用整数(验证为>0);或者,如果您打算允许使用浮点数。如果后者是你的目标;那么,您的简单实现将不再起作用

除此之外:您首先要学习浮点数的概念。假设一个循环类似于

double number = ...
while (number !=0 ) {
  ..
  number--;
}

当使用浮点数而不是int/long时,将始终停止!相反…

阶乘在其正常定义中仅定义为正整数。如果你想计算任何实数的阶乘,看看伽马函数


即使对于3.5,您也会得到定义的值!,因为您的代码将按以下方式计算:

1*3.5*2.5*1.5*0.5
但实际上,3.5!的值是错误的!。正确的值为:
11.6317283966
。您的方法仅对整数输入有效。有关十进制阶乘的更多信息,请参见此:

我不太理解你的问题?你能再详细一点吗?参考这个链接,没有非整数值的阶乘。“阶乘”的概念有一些扩展,请参见维基百科:如果您键入
3.5
,您的循环将永远不会结束,也许您应该将其更改为
,而(number>=0)
计算非整数的函数将类似于作为阶乘扩展的函数。这是非常正确的答案!Gamma函数将允许计算一个double的阶乘…实际上,OP中的代码不会停在那里,因为它检查
数字=0
,在0以下仍然为真。