计算C(n,m)。。对应计算式子C(n,m)=n!/(m!*(n-m)!)
以下提供了两种算法,显然第二种直接算效率高,而且不容易溢出数据。
(如果不妥,还望指出)
#include"cstdio"
#include"cstdlib"
#include"cstring"
#include"algorithm"
#include"iostream"
using namespace std;
long long C(int n,int m)
{
long long ans=1;
//为了方便计算
if(n<n-m) m=n-m; //,这条语句不要也行. 因为C(n,m)=C(n,n-m)
for(int i=m+1;i<=n;i++) ans*=i;
for(int i=1;i<=n-m;i++) ans/=i;
return ans;
}
long long factorial(int n)
{
long long m=1;
for(int i=1;i<=n;i++)
m*=i;
return m;
}
long long C_2(int n,int m)
{
return factorial(n)/(factorial(m)*factorial(n-m));
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
cout<<C(n,m)<<endl;
cout<<C_2(n,m)<<endl;
return 0;
}