组合数的计算虽说简单但也不乏有些陷阱,这主要是因为语言中的数据类型在表示范围上是有限的。更何况还有中间结果溢出的现象,所以千万要小心。
输入描述
求组合数的数据都是成对(M与N)出现的,每对整数M和N满足0<m, n≤20,以EOF结束。
输出描述
输出该组合数。每个组合数换行。
运行代码
#include<stdio.h>
long long int jiecheng(int n)
{
if(n==0) return 1;
else return n*jiecheng(n-1);
}
long long int banjiecheng(int m,int n)
{
long long int ji=1;
for(int i=0;i<n;i++)
{
ji*=m;
m--;
}
return ji;
}
long long int zuheshu(int m,int n)
{
return banjiecheng(m,n)/jiecheng(n);
}
int main()
{
int m,n;
while(scanf("%d %d",&m,&n)!=EOF){
printf("%d\n",zuheshu(m,n));
}
}