《算法笔记》5.8小节——数学问题->组合数 问题 B: 求组合数

本文探讨了组合数计算中的常见问题,特别是在数据类型限制和中间结果溢出方面,提供了一段C++代码作为解决方案,展示了如何避免这些陷阱。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                           问题 B: 求组合数

题目描述

组合数的计算虽说简单但也不乏有些陷阱,这主要是因为语言中的数据类型在表示范围上是有限的。更何况还有中间结果溢出的现象,所以千万要小心。

输入

求组合数的数据都是成对(M与N)出现的,每对整数M和N满足0<m, n≤20,以EOF结束。

输出

输出该组合数。每个组合数换行。

样例输入

5 2
18 13

样例输出

10
8568

 AC代码:

#include<cstdio>
#include<cstring>
long long fact(long long m,long long n){
 long long ans = 1;
 for(long long i = 1;i <= m;i++){
    ans=ans*(n-m+i)/i;
  }
 return ans;
}
int main(){
    long long m,n;
    while(scanf("%lld%lld",&m,&n)!=EOF){
        printf("%lld\n",fact(n,m));
    }
         
    return 0;
}
/**************************************************************
    Problem: 5849
    User: 2015212040209
    Language: C++
    Result: 正确
    Time:0 ms
    Memory:1116 kb
****************************************************************/

 

2025-03-27T18:00:11.729Z[RC-E][WARN]: L-imsdk_ver-O | {"commitId":"6d681dbc4c78eb23bb4ea2400eeadea4e5901f92","version":"5.8.2-enterprise.4"} | undefined 2025-03-27T18:00:11.737Z[RCRTC][WARN]: L-index_install_rtc_plugin-O | {"RCRTC Version":"5.6.13-enterprise.1","Commit":"ba2b09b5a7e45d09a1b4d4964843d407c879f553","browserInfo.browser":"chrome","browserInfo.supportsUnifiedPlan":true,"browserInfo.version":134} | undefined 2025-03-27T18:00:11.784Z[RCCall][WARN]: _ | RCCall Version: 5.1.2-enterprise.4, Commit: 36a0f3a722bbc85328120e8db4bd13bea4d7f71a | undefined 2025-03-27T18:00:11.786Z[RCCall][WARN]: _ | RCCallEngine Version: 5.1.2-enterprise.4 CommitId: ace301360bc38bcf6ae38c7f5443b01c36be6be5 | undefined 2025-03-27T18:00:11.791Z[RC-E][WARN]: L-connect-S | status: 1, code: undefined | undefined 2025-03-27T18:00:11.792Z[RC-E][WARN]: A-connect-S | status: 1, code: undefined | undefined 2025-03-27T18:00:12.297Z[RC-E][WARN]: A-connect-S | status: 0, code: undefined | undefined 2025-03-27T18:00:19.605Z[RCCall][WARN]: _ | CallMessageHandler] sendCallMesage sendInvite | {"roomType":0,"channelId":"","conversationType":3,"targetId":"GROUPBJ2025032800107785","callId":"CMa4kInGEMkMX8L9iG311x_1743098419604_360","extra":"","pushTitle":"","pushContent":"","mediaType":2,"inviteUserIds":["wxw"]} 2025-03-27T18:00:19.686Z[RCCall][WARN]: _ | [RCCallStateMachine] notifyUserStateChange -> info: {"user":{"userId":"cs_renning","state":1,"isCaller":true,"isRemote":false}} | undefined 2025-03-27T18:00:19.687Z[RCCall][WARN]: _ | [RCCallStateMachine] notifyUserStateChange -> info: {"user":{"userId":"wxw","state":1,"isCaller":false,"isRemote":true}} | undefined 2025-03-27T18:00:19.687Z[RCCall][WARN]: _ | _getTimeout -> timeout: 59796 | undefined 2025-03-27T18:00:19.688Z[RCCall][WARN]: _ | [RCCallStateMachine] notifyStateChange -> info: {"state":0} | undefined 2025-03-27T18:00:20.080Z[RCCall][WARN]: _ | onMessage -> msgBufferList: 1 | undefined 2025-03-27T18:00:20.321Z[RCCall][WARN]: _ | _handleBu
最新发布
03-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值