阅读背景:

计算组合数 C(下n上m)=n!/(m!(n-m)!)

来源:互联网 
#include <iostream>
using namespace std;


long long factorial(int n)
{
	long long m = 1;
	for (int i = 1; i <= n; i++)
		m *= i;
	return m;
}
long long C(int n, int m)
{
	return factorial(n) / (factorial(m)*factorial(n - m));
}//n超过21结果错误
long long RightC(int n, int m)
{
	if (m < n - m)m = n - m;
	long long ans = 1;
	for (int i = m + 1; i <= n; i++)ans *= i;//约去m!或(n-m)!
	for (int i = 1; i <= n - m; i++)ans /= i;
	return ans;
}//改进后的方法
int main()
{
	cout << C(21, 1) << endl;
	cout << factorial(20) << endl;
	cout << factorial(21) << endl;//long long只能计算20!
	cout << RightC(21, 1) << endl;
	cout << C(25, 12) << endl;
	cout << RightC(25, 12) << endl;
	return 0;
}
#include <iostream>
using namespace std;


long



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: