[英]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.