我不明白这个程序,我不明白为什么当程序接受用户输入时数字被初始化为1。 这就是我理解这个显然是错误的程序的方法:
输入阶乘数,让我说输入6,它会进入while循环,因为6大于1。
现在factorial
为1,number
为6,6 * 1 = 6
。然后是6 - 1 = 5
,所以factorial
为5,但输出为720。
我认为我不理解while循环
#include <iostream>
using namespace std;
int main()
{
// declaration of the variables
int factorial, number;
// initialization of the variables
factorial = 1;
number = 1;
// Prompt the user to enter the upper limit of integers
cout << "Please enter the number of the factorial";
cin >> number;
// using the while loop find out the factorial
while (number > 1)
{
factorial = factorial * number;
number = number - 1;
}
cout << "The factorial is " << factorial;
}
答案 0 :(得分:2)
您的程序正常运行。
6! = 6 * 5 * 4 * 3 * 2 = 720.
顺便说一下,使用递归来解决这类递归问题。
#include <iostream>
using namespace std;
int main()
{
//declaration of the variabe
unsigned int number;
//prompt the user to enter the upper limit of integers
cout << "Please enter the number of the factorial";
cin >> number;
cout << factorial(number);
return 0;
}
unsigned int factorial(unsigned int n)
{
if (n <= 1)
{
return 1;
}
else
{
return n * factorial(n-1);
}
}
答案 1 :(得分:2)
你错过了一个“&lt;”在该计划的最后一行。它应该是
cout<<"The factorial is "<<factorial;
在编译和运行程序后进行此更改后,它正确地为我工作,即计算正确的阶乘。例如5的阶乘,即5 * = 5 * 4 * 3 * 2 * 1 = 120
答案 2 :(得分:1)
number
的初始分配确实是不必要的。但是,您应该检查输入操作是否有错误:
int factorial = 1;
int number;
if (!(std::cin >> number))
{
/* error! */
return 1; // i.e. abort the program
}
while (number > 1) { /* ... */ }
答案 3 :(得分:0)
首先,由于以下条件,它被初始化为1:
Factorial(0) = 1
Factorial(1) = 1
因此,如果用户输入的数字小于 2 ,则无需进行某些计算,只需输出 1
答案 4 :(得分:0)
我注意到的第一件事是您的代码中存在错误:
cout<<"The factorial is " < factorial;
应该是:
cout<<"The factorial is " << factorial;
更正此问题应修复编译错误。
此代码的本质是:
int number
)
number