【发布时间】:2015-04-17 23:25:00
【问题描述】:
我需要一个函数来计算纸牌游戏的 (n, k) 的mathematical combination。
我目前的尝试是使用基于通常 Factorial 方法的函数:
static long Factorial(long n)
{
return n < 2 ? 1 : n * Factorial(n - 1);
}
static long Combinatory(long n , long k )
{
return Factorial(n) / (Factorial(k) * Factorial(n - k));
}
它工作得很好,但问题是当我使用某个数字范围时(n 值最大值为 52,k 值最大值为 4),它让我返回一个错误的值。例如:
long comb = Combinatory(52, 2) ; // return 1 which should be actually 1326
我知道这是因为我在做 Factorial(52) 时溢出了 long 但我需要的范围结果并不像看起来那么大。
有什么办法可以解决这个问题吗?
【问题讨论】:
-
您正在寻找计算二项式。 stackoverflow.com/questions/1495856/…
-
你为什么用 C# 和 Java 标记这个?
-
@p.s.w.g : 因为这两个代码都是用 Java 和 C# 编译的,而且 long 都是 64 位的。
-
我很好奇你为什么需要计算这么大的数字。一个近似值就足够了吗?