计算组合数
#include <stdio.h>
#include <math.h>
// 请先独立完成,如果有困难可以翻阅本书代码仓库中的答案,但一定要再次独立完成。
// “抓住主要矛盾”——始终把学习、实验的焦点集中在最有趣的部分。如果直观地解决方案行得通,就不必追究其背后的原理。
/**
【题目】计算组合数。
编写函数,参数是两个非负整数n和m,返回组合数 n!/m!(n-m)! ,其
中m≤n≤25。例如,n=25,m=12时答案为5200300。
*/
/**
【分析】自定义函数n!
*/
long long factorial(int n) {
long long result = 1;
int i;
for (i = 1;i <= n;i++) {
result *= i;
}
return result;
}
long long C(int n,int m) {
long long result;
result = factorial(n) / (factorial(m)*factorial(n-m)); // 容易溢出
return result;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
if (n> 25 || m<0 || m > n) {
printf("input error");
return 0;
}
printf("%d",C(n,m));
return 0;
}
溢出是个头痛的问题。