100的阶乘函数在c#中的结果为0,即使使用长类型

100的阶乘函数在c#中的结果为0,即使使用长类型,c#,factorial,C#,Factorial,我有这个代码来确定100的阶乘。但在50年代之后,它开始给出0的结果。我在寻找这个问题的答案,通常的说法是使用长变量。但即使使用它,它仍然说答案是0。你能告诉我哪里出错了吗 static void Main(string[] args) { long c; int a = 100; c = a * (a - 1); for (int i=a-2; i>=1 ; i--) {

我有这个代码来确定100的阶乘。但在50年代之后,它开始给出0的结果。我在寻找这个问题的答案,通常的说法是使用长变量。但即使使用它,它仍然说答案是0。你能告诉我哪里出错了吗

    static void Main(string[] args)
    {
        long c;
        int a = 100;
        c = a * (a - 1);
        for (int i=a-2; i>=1 ; i--)
        {
            c = c * i;
        }
        Console.WriteLine(c);
        Console.ReadLine();
    }`

long
type不够长,无法存储100的阶乘

改用
biginger

BigInteger c = new BigInteger(0);
int a = 100;
c = a * (a - 1);
for (int i = a - 2; i >= 1; i--)
{
    c = c * i;
}
Console.WriteLine(c);
Console.ReadLine();

为了使用
biginger
,您必须在项目中添加对System.Numerics程序集的引用。()

100!有157个以上的数字。一个
长的
不够大,装不下它。在64位值中,可以得到18或19位数字。128位将得到约38位数字。不适用于长型。您不能超过49,否则,您将得到一个大于长型的数字。请尝试代替
long
。100的阶乘约为9.3E157,而long的最大值为9.2E18。所以它远远超出了数据类型的限制。您应该尝试BigInteger数据类型。