被困在循环c++中
Stuck on a loop C++
我想做一个阶乘阶乘通过用户输入一个数字,然后执行这个公式
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
编辑:嗨!不要介意这个答案,快读
相关文章:
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 循环后如何继续阅读
- Ardunio UNO解决了多个重叠的定时器循环
- Eigen如何在容器循环中干净地附加矩阵
- 在某些循环内使用vector.push_back时出现分段错误
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 为什么我的for循环不能正确获取argv
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- while循环中while循环的时间复杂度是多少
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 为什么在这个代码结束循环中没有得到结束
- 在基于范围的for循环中使用结构化绑定声明
- 用于C++中带有数组和指针的循环
- 循环中的随机函数
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 在循环C++中指定字符串之后,不会打印该字符串