• QHUOJ


    题目描述

    给定两个正整数n,m,计算组合数C(n,m)。组合数计算公式为:C(n,m)=n!/((n-m)!*m!)

    已知n,m <= 50. 结果很大需要使用long long存储。

    输入

    输入两个整数n,m

    输出

    输出结果

    样例输入

    4 2

    样例输出

    6

    题目中,运算的结果可以在long long的类型中存储,但是运算过程中产生的数据是存不下的,所以进行了拆分运算。
    例如:50!,把50*49*...*41的结果存在一个long long的类型中(这个结果能不能存下没有验证,在这只是说明方法),40*39*...*31的结果再存到一个long long的类型中。
    大概就是这个意思,分开来进行运算。
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    int main()
    {
        int n,m;
        scanf("%d %d",&n,&m);
        long long sum=1;
        long long a[5]={1,1,1,1,1};    
        int b[50];
        int num=0;
        int ans=0;
        for(int k=0,i = n;i>n-m;i--)
        {
            if(k==5)                 //每5个数为一组,把运算结果存到a数组中。
            {
                ans++;
                k = 0;
            }
            a[ans] = a[ans]*i;
            k++;
        }
        ans = 0;
        for(int k=0,i = m;i>1;i--)   //分开进行除法运算,
        {
            if(k==5)
            {
                ans++;
                k = 0;
            }
            if(a[ans]%i == 0)
            {
                a[ans] = a[ans]/i;
                k++;
            }
            else 
            {
                b[num] = i;
                num++;
                
            }
        }
        for(int i = 0;i<5;i++)                   //对于上一部分中不能整除的数,看其可否被a数组中的其他数整除
        {
            for(int j = 0;j<num;j++)
            {
                if(a[i]%b[j] == 0 && b[j] != 1)
                {
                    a[i] = a[i]/b[j];
                    b[j] = 1;
                }
            }
        }
        for(int i = 0;i<5;i++)      //求结果
        {
            sum = sum * a[i];
        }
    
        printf("%lld
    ",sum);
        return 0;
    }
     
  • 相关阅读:
    简单实现MySQL数据库的日志审计
    利用Impdp+Network将Oracle 11g数据迁移到Oracle 19c
    Oracle Orion tool check IO(Oracle Orion工具查看及校验IO)
    Oracle exp(expdp)数据迁移(生产环境,进行数据对以及统计信息的收集)
    OEM 12C(12.1.0.5)安装插件Plug-in监控MySQL(Linux)
    马斯洛需求层次理论
    完成一条指令的三个阶段
    Render
    JXP
    DOM
  • 原文地址:https://www.cnblogs.com/hdyss/p/10838673.html
Copyright © 2020-2023  润新知