且未

博客园 首页 新随笔 联系 订阅 管理

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));
    //可能会溢出
}

正解:

long long C(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;
    for(int i=1;i<=n-m;i++) ans /= i;
    return ans;
}

others:

long long C(int n,int m)
{
    long long ans = 1;
    for(int i=1;i<=m;i++)
        ans = ans * (n-i+1)/i;
    return ans;
}

 

posted on 2018-09-18 10:58  阿聊  阅读(240)  评论(0编辑  收藏  举报