2017-04-19 76 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