使用用户输入计算阶乘 - 控制台应用程序

Lee*_*ong 1 c# console-application calculation

编辑:这次粘贴了正确的代码......

我正在尝试计算一个数字的阶乘.在这个例子中,我输入数字5.

尝试这种方法,给了我一个巨大的负数:

 static void Main(string[] args)
    {
        int consoleInput = int.Parse(Console.ReadLine());            

        for (int i = 1; i < consoleInput; i++)
        {
            consoleInput = consoleInput * i;
        }

        Console.WriteLine(consoleInput);
    }
Run Code Online (Sandbox Code Playgroud)

输出 -1899959296

然而:

 static void Main(string[] args)
    {
        int consoleInput = int.Parse(Console.ReadLine());
        int result = consoleInput;

        for (int i = 1; i < consoleInput; i++)
        {
            result = result * i;
        }

        Console.WriteLine(result);
    }
Run Code Online (Sandbox Code Playgroud)

输出 120

如果我两次输入5,则第一次输出为-1899959296,第二次输出为120.

有人可以解释原因吗?

Pou*_*Bak 5

问题是你consoleInput在每个循环中改变' ':

for (int i = 1; i < consoleInput; i++)
        {
            consoleInput = consoleInput * i;
        }
Run Code Online (Sandbox Code Playgroud)

现在for每次都会检查新值.

它变为负面的原因是溢出条件.

编辑:

它变得如此之大的原因是因为循环'永远'不会结束,因为你检查的值会在每个循环上增长.

  • @PoulBak循环将在第一次溢出后结束,因为`i`将大于`consoleResult`(这是负数). (2认同)