编写函数,参数是两个非负整数n和m,返回组合数Cmn=n!/(m!(n-m)!),其中m<=n<=25。例如,n=25,m=12时答案为5200300。
//有问题
#include
typedef long long ll;
using namespace std;
ll fac(int n)
{
ll m=1;
for(int i=1;i<=n;i++)
{
m*=i;
}
return m;
}
ll C(ll n,ll m)
{
return fac(n)/(fac(m)*fac(n-m));
}
int main()
{
ll n,m=0;
cin>>n>>m;
cout<<C(n,m)<<endl;
}
//计算的中间结果溢出
//进行化简后可以简化计算过程
#include
typedef long long ll;
using namespace std;
ll fac(int n)
{
ll m=1;
for(int i=1;i<=n;i++)
{
m*=i;
}
return m;
}
ll C(ll n,ll m)
{
if(m<n-m)
{
m=n-m;
}
ll ans=1;
for(int i=m+1;i<=n;i++)
{
ans*=i;
}
for(int i=1;i<=n-m;i++)
{
ans/=i;
}
return ans;
}
int main()
{
ll n,m=0;
cin>>n>>m;
cout<<C(n,m)<<endl;
}