c# - 导致错误的阶乘方法

标签 c# factorial

我正在尝试获取数字 66 的阶乘值,但我的方法导致输出 0。但每当我尝试获取 5 的阶乘时,它都会给我一个输出 120。谁能告诉我为什么?

 public static int factorial(int n)
 {
            if (n == 1)
                return n;
            return n * factorial(n - 1);
 }

最佳答案

当然 - 阶乘变得非常大,非常快。您正在 非常 快速溢出 int 的边界...并且在某个时候您将乘以足够多的因子以使溢出为 0,然后该值将永远保持为 0。

根据 Google 的快速搜索,66 阶乘是 5.44344939 × 1092 - 这远远超过 int 可以处理的范围,甚至 long十进制。你可以让 double 来处理它——你会失去大量的精度,而且它会很快积累起来,但至少它不会溢出......

关于c# - 导致错误的阶乘方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4202626/

相关文章:

factorial - 如何计算阶乘结果作为数字应占多少位?

python - 在 Python3 中使用循环计算阶乘

c# - 在 Texture2D 中切孔

c# - 在 Sharepoint 中按组获取用户

c# - 根据最新的日期时间获取列表项

c# - 升级到 Visual studio 2015 和 Azure Sdk 2.8.2 后,Azure Worker 角色未启动

c++ - 数组内存 C++ 中的可能错误

sql - 在 SQL 中,如何生成 5!56 的每个可能的唯一组合?

ruby - 这种方法如何解决我的阶乘?

c# - 如何在我的程序中使用 .NET 类型字符串?