计算组合数

编写函数,参数是两个非负整数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;
}

你可能感兴趣的:(c++,c#,c语言)