java中非整数值的阶乘

时间:2017-04-19 12:10:40

标签: 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 am using scanner*/
     while (number !=0 ){
       factorial = factorial * number;
       number--;
     }
     System.out.println(factorial);
   }
 }

3 个答案:

答案 0 :(得分:5)

其正常定义中的因子仅针对正整数定义。如果要计算任何实数的阶乘,请查看 Gamma函数

https://en.wikipedia.org/wiki/Gamma_function

答案 1 :(得分:2)

事情是: factorial 对于整体,正面数字非常简单。

概念可以应用于浮点数,但背后的数学可以被视为advanced

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

换句话说;您必须决定是否打算将程序更改为使用 int 数字(已验证为> 0);或者如果您打算允许浮点数。如果后者是你的目标;那么你的简单实现就不会再做了。

除此之外:你想首先研究浮点数的概念。假设像

这样的循环是误解
double number = ...
while (number !=0 ) {
  ..
  number--;
}
使用浮点数而不是int / long时,

总会停止!相反......

答案 2 :(得分:0)

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

1*3.5*2.5*1.5*0.5

但实际上它是3.5的错误值!正确的值是:11.6317283966。您的方法仅对整数输入有效。有关十进制阶乘的更多信息,请参阅此处: this link