为什么这个程序中的错误是c ++?

时间:2012-01-08 13:55:58

标签: c++

我不明白这个程序,我不明白为什么当程序接受用户输入时数字被初始化为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;
}

5 个答案:

答案 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;

更正此问题应修复编译错误。

此代码的本质是:

  1. 从用户
  2. 获取一个号码(int number
  3. 打印打印number
  4. factorial