1063. 计算组合数
题目描述
给出两个非负整数n和m,编写程序计算组合数C(n,m)的值。
输入
一行两个空格隔开的非负整数n,m。
输出
输出一个数表示C(n,m)。
样例输入
5 2
样例输出
10
数据范围限制
0<n<=20,0<=m<=n。
C++代码
#include <iostream>
#include <cassert>
using namespace std;
// Factorial formula
double factorial(int n)
{
double f = 1;
for(int i=n; i>0; i--)
{
f *= i;
}
return f;
}
long long getCombinationValue(int n, int m)
{
long long Cnm = 1;
for(int i=0; i<min(m, n-m); i++)
{
Cnm = Cnm * (n-i) / (i+1);
}
return Cnm;
}
int main()
{
int n, m;
cin >> n >> m;
assert(n>0 && n<=20);
assert(m>=0 && m<=n);
#ifdef UNIT_TEST
// C(n,m) = n!/((n-m)!*m!)(m<=n)
cout << factorial(n)/(factorial(n-m)*factorial(m)) << endl;
#else
cout << getCombinationValue(n, m) << endl;
#endif
return 0;
}