博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
组合数末尾的零
阅读量:5031 次
发布时间:2019-06-12

本文共 1036 字,大约阅读时间需要 3 分钟。

题目连接:

题意:

      从m个不同元素中取出(≤ m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元素的组合数。组合数的计算公式如下:

      C(mn) = m!/((n)!n!) 

      现在请问,如果将组合数C(mn)写成二进制数,请问转这个二进制数末尾有多少个零。

       案例:

      input:

      2

      4 2

      1000 500

      output:

      1

      6

思路分析:

      因为n ≤ m≤1000,所以m!的结果过大会溢出,所以先得出组合数再化为二进制的方法是行不通的。因此需要逐个计算。

      进行简单归类后会发现,当某个数可以有多少个因子是2,它的二进制末尾就有多少个0;因此在循环计算组合时可以逐个求出可以有多少因子是2 。

      先将才组合数的计算公式化简,可得结果为n+1到m的乘积除以1到m-n的乘积,再对分母进行循环求出可以有多少因子是2,得出a,同时对分子也进行循环求出可以有多少因子是2,

      得出b,最后用分母的因字数减去分子的因字数,输出a-b。

源代码如下:

     

1 #include
2 using namespace std; 3 int main() 4 { 5 int m,n,a,T,j,i,b,k; 6 cin>>T; 7 for(i=0;i
>m>>n;11 for(j=n+1;j<=m;j++)12 {13 k=j;14 while(k%2==0)15 {16 k=k/2;17 a++;18 }19 }20 for(j=1;j<=m-n;j++)21 {22 k=j;23 while(k%2==0)24 {25 k=k/2;26 b++;27 }28 }29 cout<
<

 

    

转载于:https://www.cnblogs.com/q-c-y/p/4653960.html

你可能感兴趣的文章
华为软件开发云测评报告二:代码检查
查看>>
集合1
查看>>
关键词 virtual
查看>>
建造者模式(屌丝专用)
查看>>
UVALive 4730 Kingdom +段树和支票托收
查看>>
[APIO2010]特别行动队
查看>>
SpringBoot 集成ehcache
查看>>
初步swift语言学习笔记2(可选类型?和隐式可选类型!)
查看>>
Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
查看>>
在Vs2012 中使用SQL Server 2012 Express LocalDB打开Sqlserver2012数据库
查看>>
CodeBlocks X64 SVN 编译版
查看>>
Excel催化剂开源第42波-与金融大数据TuShare对接实现零门槛零代码获取数据
查看>>
bug记录_signalr执行$.connnection.testhub结果为空
查看>>
【转】常用的latex宏包
查看>>
[TMS320C674x] 一、GPIO认识
查看>>
酷狗的皮肤文件存放在哪
查看>>
C++的引用
查看>>
T-SQL查询进阶--深入浅出视图
查看>>
MapKeyboard 键盘按键映射 机械革命S1 Pro-02
查看>>
Android读取url图片保存及文件读取
查看>>