首页 > 解决方案 > 为什么使用 BigInteger 不可能实现阶乘 1000?

问题描述

所以当你用谷歌搜索时,它说 C# 中的 BigInteger 是无限的,但 1000 的阶乘是未定义的。我做了这个简单的递归方法,它返回的东西非常大。

static BigInteger faculty(int n) {

        if(n == 2)
            return 2;
        return n*faculty(n-1);
    }

所以这可能是一个溢出,但这是否意味着 BigIntegers 不是无限的?

标签: c#.netmathbigintegerinteger-overflow

解决方案


这不是(不可能)。以下工作在这里很好(在 .NET Core 3.1 和 .NET Framework 4.7.2 上测试):

var x = faculty(1000);
var s = x.ToString();
Console.WriteLine(s.Length); // 2568 (digits)
Console.WriteLine(s); // 402387260...000000 (lots of digits)

推荐阅读