坚持循环C ++

时间:2014-03-26 20:54:22

标签: c++ for-loop factorial

我试图做一个阶乘 一个阶乘通过用户输入接收一个数字然后执行此公式

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 << "! : ";
}

4 个答案:

答案 0 :(得分:3)

在标准数学中,邻接意味着乘法。在大多数计算机语言中,它没有。

在C ++中,您必须使用*运算符乘以两个数量:

    sum = fac * (fac - cnt)

但是,您会发现程序中还有其他一些数学/逻辑错误。例如,当fac > 0为false时退出循环,但您永远不会在循环中修改fac。因此循环将执行零次,或执行无限次。

答案 1 :(得分:3)

在C ++中,你不能成倍地说4(2),就像我们经常做的数学速记那样。您必须明确使用*

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;

答案 2 :(得分:0)

除了你的其他逻辑之外,错误是由于fac(fac-cnt)引起的。我想你正试图将这些变量加倍。请尝试以下

fac*(fac-cnt);

答案 3 :(得分:-1)

我发现你的问题很不清楚。看起来你想要一个递归的方法来计算! ...

看看这个

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

从这里得到它:cplusplus.com

编辑:哇!不介意这个答案,快速阅读