编辑:这次粘贴了正确的代码...
我正在尝试计算数字的阶乘。在此示例中,我输入数字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);
}
输出-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);
}
输出120
如果两次都输入5,则第一次输出为-1899959296,第二次输出为120。
有人可以解释为什么吗?
答案 0 :(得分:5)
问题是您在每个循环中都更改了“ consoleInput
”:
for (int i = 1; i < consoleInput; i++)
{
consoleInput = consoleInput * i;
}
现在,“ for
”每次都会检查一个新值。
它变为负数的原因是溢出条件。
修改:
之所以如此之大,是因为循环“永无止境”,因为您检查的值在每个循环中都会增加。