我正在使用30左右的阶乘!我不能得到一个非常好的结果的价值。我只希望它精确到6个有效数字,或任何能给出合理结果的数字。目前我的代码是......
static void Main(string[] args)
{
{
int number = 30;
long fact;
factorial(number, out fact);
}
}
public static void factorial(int events, out long eventfact)
{
eventfact = 1;
for (int tt = 1; tt <= events; tt++)
{
eventfact = eventfact * tt;
}
}
返回结果
-8764578968847253504
这远非
2.65252859812191E+32
我已经查看了不同类型的整数,但似乎没有什么比我正在使用的数字足够大。
任何帮助都会很棒!
答案 0 :(得分:2)
你可以使用这个库,30你不应该有任何问题!有这个。
https://msdn.microsoft.com/en-us/library/system.numerics.biginteger(v=vs.110).aspx
你可以做类似的事情(我这里没有编译器)
using System.Numerics;
static void Main(string[] args)
{
{
int number = 30;
long fact;
factorial(number, out fact);
}
}
public static void factorial(int events, out BigInteger eventfact)
{
eventfact = 1;
for (int tt = 1; tt <= events; tt++)
{
eventfact = BigInteger.Multiply(eventfact, tt); }
}
答案 1 :(得分:0)
您可以使用BigInteger结构来完成此任务。
static void Main(string[] args)
{
int number = 30;
BigInteger fact;
factorial(number, out fact);
}
public static void factorial(int events, out BigInteger eventfact)
{
eventfact = new BigInteger(1);
for (int tt = 2; tt <= events; tt++)
{
eventfact = eventfact * tt;
}
}