C# 使用用户输入控制台应用程序计算阶乘
已编辑:这次粘贴了正确的代码 我想计算一个数的阶乘。在本例中,我输入数字5 尝试这种方法会给我一个巨大的负数: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
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,这是正确的,因此我在引号中加上了“从不”。