C++ 卡在循环C+上+;

C++ 卡在循环C+上+;,c++,for-loop,factorial,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 nu

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

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 << "! : ";
}
#包括
使用名称空间std;
int main()
{
int fac=0;
整数和=0;
int-cnt=1;
cout>fac;
对于(fac;fac>0;cnt++)
{
总和=fac(fac-cnt)
}

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

在C++中,必须使用<代码> */COD>运算符乘以两个量:

    sum = fac * (fac - cnt)

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

在标准数学中,邻接意味着mu在大多数计算机语言中,它不是

在C++中,必须使用<代码> */COD>运算符乘以两个量:

    sum = fac * (fac - cnt)

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

除了其他逻辑之外,错误是一个错误由于fac(fac cnt)而上升。我认为您正在尝试将这些变量相乘。请尝试以下方法


fac*(fac cnt);

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


在C++中,你不能乘法说<代码> 4(2),因为我们经常做数学速记。你必须明确地使用<代码> */COD> < < /P>
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;
因此,
prod
的值是阶乘。只需输出它

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

> CUT

C++中,你不能乘以说<代码> 4(2)< /代码>,因为我们经常做数学速记。你必须明确使用<代码> */COD> < < /P>

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;
因此,
prod
的值是阶乘。只需输出它

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

cout我发现你的问题很不清楚。看来你需要一个递归方法来计算a

看看这个

int fac(int n)
{
  return (n == 1 || n == 0) ? 1 : fac(n - 1) * n;
}
从这里得到:


编辑:啊!别介意这个答案,快读吧

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

看看这个

int fac(int n)
{
  return (n == 1 || n == 0) ? 1 : fac(n - 1) * n;
}
从这里得到:


编辑:嘎!不要介意这个答案,快速阅读
fac
是一个
int
。语法
fac(fac-cnt)
毫无意义。你不能调用
int
。这就像编写
5(5-1)
。调用5意味着什么?另外,
fac>0
是一个无限循环(假设
fac
开始时为正值),因为
fac
在循环内不会改变;你只会改变
sum
cnt
。你必须
fac
cnt
真的很难让它工作。
fac
int
。语法
fac(fac-cnt)
没有任何意义。你不能调用
int
。这就像写
5(5-1)
。调用5意味着什么?而且,
fac>0
是一个无限循环(假设
fac
开始为正),因为
fac
在循环内不会改变;你只会改变
sum
cnt
。你必须
fac
cnt
真的很难让它工作。你可以用
i>1
替换
0
,并保存一次迭代;)所以输入i在原始代码中等同于cnt?不确定我是如何进入所有内容的,所以有点混乱你可以用
i>1
替换
i>0
,并保存一次迭代;)所以输入i在原始代码中等同于cnt?不确定我是如何进入所有内容的,所以有点混乱