C(n, m) 和C(n, n-m) 的结果是一样的 , 还有C(n, 0)是1 , 这些是基本知识。
C(n, m)的分子部分:n*(n-1)*...*(m+1). 一共是n-m项相乘, 所以m越大 , 分子部分因子个数越少,
代码实现时溢出的可能性也会减小。
代码:
#include<stdio.h>
long long C(int n, int m) {
if(m < n-m) m = n-m;
long long ans = 1;
for(int i = n; i >= m+1; i--) ans *= i;
for(int i = 1; i <= n-m; i++) ans /= i;
return ans;
}
int main() {
long long ans = C(26, 5);
printf("%I64d\n", ans);
return 0;
}