【问题标题】:big numbers from factorials [duplicate]来自阶乘的大数[重复]
【发布时间】:2017-07-06 16:55:35
【问题描述】:

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

我查看了不同类型的整数,但对于我正在处理的数字来说,似乎没有什么足够大。
任何帮助都会很棒!

【问题讨论】:

标签: c# numbers


【解决方案1】:

你可以用这个库,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); }

    }

【讨论】:

  • 不是我,我没有足够高的重复性。在 static void Main(string[] args) 行之前您还有更多代码吗?我无法让 BigInterger 工作。
  • 我知道不是你,是其他人在意识到时间戳后删除了评论......
  • 您必须使用 System.Numerics 进行导入;
【解决方案2】:

您可以使用 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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    相关资源
    最近更新 更多