被困在循环c++中

Stuck on a loop C++

本文关键字:c++ 循环      更新时间:2023-10-16

我想做一个阶乘阶乘通过用户输入一个数字,然后执行这个公式

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

唯一的问题是它说不能用' face '作为一个函数,除了我认为其中的数学是正确的,是的。

#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为假时退出循环,但在循环中不修改fac。因此,循环要么执行0次,要么执行无限次。

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

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

fac*(fac-cnt);

我觉得你的问题很不清楚。看来你需要一个递归方法来计算a!…

看看这个

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

从这里得到它:cplusplus.com

编辑:嗨!不要介意这个答案,快读