繁体   English   中英

陷入循环C ++

[英]Stuck on a loop 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 << "! : ";
}

在标准数学中,邻接表示乘法。 在大多数计算机语言中,不是。

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

    sum = fac * (fac - cnt)

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

在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;

除了您的其他逻辑外,该错误是由于fac(fac-cnt)引起的。 我认为您正在尝试将这些变量相乘。 尝试以下

fac*(fac-cnt);

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

看看这个

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

从这里得到它: cplusplus.com

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM