我试图做一个阶乘 一个阶乘通过用户输入接收一个数字然后执行此公式
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 :(得分: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
编辑:哇!不介意这个答案,快速阅读