2014-03-26 80 views
0

我試圖做一個階乘 階乘採取了一些通過用戶輸入,然後做這個公式憋屈環路C++

input = 5; 
5! = 5(4)(3)(2)(1) 

的唯一的事情是,它的說法不能使用「FAC '作爲一個功能,而不是數學,我認爲是正確的,是的。

#include <iostream> 

using namespace std; 

int main() 
{ 
    int fac = 0; 
    int sum = 0; 
    int cnt = 1; 
    cout << "Input a number to get the Factorial: "; 
    cin >> fac; 

    for (fac; fac > 0; cnt ++) 
    { 
     sum = fac(fac - cnt) 
    } 

    cout << fac << "! : "; 
} 
+0

'fac'是一個'int'。語法fac(fac - cnt)'沒有意義。你不能調用'int'。這就像寫'5(5-1)'。給5打電話意味着什麼? – fredoverflow

+0

此外,'fac> 0'是一個無限循環(假設'fac'開始爲正值),因爲'fac'在循環內部沒有改變;你只能改變'sum'和'cnt'。 – fredoverflow

+4

你必須'fac'說''cnt'真的很難使它工作。 –

回答

3

在標準數學中,鄰接就是乘法。在大多數計算機語言中,它並不是。

在C++中,你必須使用*操作員乘兩個量:

sum = fac * (fac - cnt) 

但是,你會發現,你在你的程序的一些其他數學/邏輯錯誤了。例如,當fac > 0爲假時,您退出循環,但您從不在循環中修改fac。因此,循環將執行零次或執行無限次數。

0

除了你的其他邏輯,錯誤是由於fac(fac-cnt)引起的。我想你正在試圖增加這些變量。說4(2)像我們經常做的數學速記請嘗試以下

fac*(fac-cnt);

3

在C++中,不能繁殖。您必須明確使用*

for(fac; fac > 0; cnt++) 
{ 
    sum = fac * (fac - cnt); 
} 

但是,這不會做你想要的。由於你永遠不會修改fac這將永遠循環。您想要將當前值乘以正在運行的產品。

int prod = 1; 
for(i = fac; i > 0; --i) // <-- notice the --i 
    prod = prod * i;  // <-- equiv to prod *= i; 

現在讓我們看看,當我們輸入5會發生什麼:

prod  i  new_prod 
--------------------------- 
    1  5  1*5 = 5 
    5  4  5*4 = 20 
20  3  20*3 = 60 
60  2  60*2 = 120 
120  1  120*1 = 120 
120 

所以prod值的階乘。只是輸出它

cout << fac << "! = " << prod << endl; 
+0

你可以用'i> 1'替換'i> 0'並保存一個迭代;) – fredoverflow

+0

所以輸入我等於cnt?在原始代碼中?不知道我是如何進入一切如此有點混淆 – TheStache

-1

我覺得你的問題很不清楚。看起來你想要一個遞歸的方法來計算! ...

看看這個

int fac(int n) 
{ 
    return (n == 1 || n == 0) ? 1 : fac(n - 1) * n; 
} 

從這裏得到它:cplusplus.com

編輯:嘎!不要介意這個答案,快速閱讀