来自阶乘

时间:2017-07-06 16:55:35

标签: c# numbers

我正在使用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

我已经查看了不同类型的整数,但似乎没有什么比我正在使用的数字足够大。
任何帮助都会很棒!

2 个答案:

答案 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;
    }
}