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

C# 使用用户输入控制台应用程序计算阶乘,c#,console-application,calculation,C#,Console Application,Calculation,已编辑:这次粘贴了正确的代码 我想计算一个数的阶乘。在本例中,我输入数字5 尝试这种方法会给我一个巨大的负数: static void Main(string[] args) { int consoleInput = int.Parse(Console.ReadLine()); for (int i = 1; i < consoleInput; i++) { consoleInput

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

我想计算一个数的阶乘。在本例中,我输入数字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);
    }
产出120

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


有人能解释一下原因吗?

问题是您在每个循环中更改了“控制台输入”:

for (int i = 1; i < consoleInput; i++)
        {
            consoleInput = consoleInput * i;
        }
现在,“for”每次都会检查一个新值

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

编辑:


它变大的原因是循环“永不”结束,因为您检查的值在每个循环中都会增长。

问题是您在每个循环中更改了“consoleInput”:

for (int i = 1; i < consoleInput; i++)
        {
            consoleInput = consoleInput * i;
        }
现在,“for”每次都会检查一个新值

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

编辑:


它变大的原因是因为循环“永不”结束,因为您检查的值在每个循环上都会增长。

int太小。我看不出两个程序有什么不同,但答案很可能大于int.MaxValue,并且溢出。这两个代码之间的区别是什么?可能是搞错了吧?我两次都输入了5。第一次输出为:-1899959296第二次输出为:120int太小。我看不出这两个程序有任何区别,但很可能答案大于int.MaxValue,并且溢出。可能重复两个代码之间的区别是什么?可能是搞错了吧?我两次都输入了5。第一次输出是:-1899959296第二次输出是:120是有意义的,但是5个循环的数字怎么会这么大呢?@PoulBak循环将在第一次溢出后结束,因为我将大于consolereresult,它是负数。@D Stanley,这是正确的,因此我在引号中加上了“从不”。有意义,但是5个循环的数字怎么会这么大呢?@PoulBak循环将在第一次溢出后结束,因为我将大于consoleResult(为负)。@D Stanley,这是正确的,因此我在引号中加上了“从不”。