为什么计算小数(34+)的阶乘返回0

esm*_*eil -2 c# console-application

int n = Convert.ToInt32(Console.ReadLine());
int factorial = 1;

for (int i = 1; i <= n; i++)
{
    factorial *= i;    
}
Console.WriteLine(factorial);
Run Code Online (Sandbox Code Playgroud)

此代码在控制台应用程序中运行,但当数字大于34时,应用程序返回0.

为什么返回0以及如何计算大数的阶乘?

McG*_*gle 6

您将超出变量可以存储的范围.这实际上是一个因子,它比指数增长得更快.尝试使用ulong(最大值2 ^ 64 = 18,446,744,073,709,551,615)而不是int(最大值2 ^ 31 = 2,147,483,647)ulong p = 1- 这应该会让你更进一步.

如果你需要更进一步,.NET 4及更高版本BigInteger可以存储任意大数字.