#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;
}
计算组合数 C(下n上m)=n!/(m!(n-m)!)
最新推荐文章于 2024-04-23 10:25:03 发布