100的阶乘函数在c#中的结果为0,即使使用长类型
我有这个代码来确定100的阶乘。但在50年代之后,它开始给出0的结果。我在寻找这个问题的答案,通常的说法是使用长变量。但即使使用它,它仍然说答案是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--) {
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数据类型。