我正在尝试做一些与统计相关的功能,以便我可以执行一些相关的程序(即:概率的统计计算,为任意深度生成帕斯卡三角形等)。
我遇到了一个可能要处理溢出的问题。例如,如果我想计算 (n=30,p=1) 的 nPr,我知道我可以将其简化为:
30P1 = 30! / (30 - 1)!
= 30! / (29)!
= 30! / 29!
= 30
但是,当使用下面的函数进行计算时,看起来我总是会因为整数溢出而得到无效值。是否有任何解决方法不需要使用库来支持任意大的数字?我在其他有关 gamma 函数的帖子中阅读了一些内容,但找不到具体的例子。
int factorial(int n) {
return (n == 1 || n == 0) ? 1 : factorial(n - 1) * n;
}
int nCr(int n, int r) {
return (nPr(n,r) / factorial(r));
//return factorial(n) / factorial(r) / factorial(n-r));
}
int nPr(int n, int r) {
return (factorial(n) / factorial(n-r));
}