2017-04-19 149 views
0

5! = 5 * 4 * 3 * 2 * 1。java中非整数值的阶乘

我对此没有任何问题。但我注意到我的程序,如果我输入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

我不太了解您的问题?你能再详细一点吗? – Koekje

+0

引用此链接https://math.stackexchange.com/questions/454053/how-do-we-calculate-factorials-for-numbers-with-decimal-places – tabby

+0

阶乘函数仅为整数定义。为什么你想接受3.5作为输入? – jsheeran

回答

2

事情是:阶乘整体,积极数相当简单。

该概念可以适用于浮点数,但后面的数学可以被认为是advanced

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

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

除此之外:你想首先研究浮点数的概念。这是一个误解假设一个循环像

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

使用浮点数时不是int /长总会停下来!相反...

5

正常定义中的因子仅限于正整数。如果要计算任意实数的阶乘,请查看Gamma函数

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

+1

这是非常正确的答案! Gamma函数将允许计算double的阶乘... –

0

你甚至3.5获取定义的值!因为你的代码将计算其如下:

1*3.5*2.5*1.5*0.5 

但实际上这是错误值3.5!正确的值是:11.6317283966。你的方法只对整数输入有效。有关小数阶乘因子的更多信息,请参阅此处: this link

+0

实际上,OP中的代码不会在那里停止,因为它会检查'number!= 0',它仍然低于零。 – Hulk