1021: 组合数末尾的零
2015-07-17 09:55
267 查看
题目:
Description
从m个不同元素中取出n (n ≤ m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元素的组合数。组合数的计算公式如下:
C(m, n) = m!/((m - n)!n!)
现在请问,如果将组合数C(m, n)写成二进制数,请问转这个二进制数末尾有多少个零。
Input
第一行是测试样例的个数T,接下来是T个测试样例,每个测试样例占一行,有两个数,依次是m和n,其中n ≤ m≤ 1000。Output
分别输出每一个组合数转换成二进制数后末尾零的数量。
Sample Input
2
4 2
1000 500
Sample Output
1
6
思路:
一个十进制数如果是2的多少次方,它的二进制数末尾就有多少个零。
<1> 分别找出组合数分子,分母中含有2的个数count1,count2;
<2> 所求的末尾0的个数count=count1-count2;
注:如果求出组合数后再去求末尾有几个零会超内存;因为题目所要求的范围。
Description
从m个不同元素中取出n (n ≤ m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元素的组合数。组合数的计算公式如下:
C(m, n) = m!/((m - n)!n!)
现在请问,如果将组合数C(m, n)写成二进制数,请问转这个二进制数末尾有多少个零。
Input
第一行是测试样例的个数T,接下来是T个测试样例,每个测试样例占一行,有两个数,依次是m和n,其中n ≤ m≤ 1000。Output
分别输出每一个组合数转换成二进制数后末尾零的数量。
Sample Input
2
4 2
1000 500
Sample Output
1
6
思路:
一个十进制数如果是2的多少次方,它的二进制数末尾就有多少个零。
<1> 分别找出组合数分子,分母中含有2的个数count1,count2;
<2> 所求的末尾0的个数count=count1-count2;
注:如果求出组合数后再去求末尾有几个零会超内存;因为题目所要求的范围。
#include<iostream> using namespace std; int main() { int t,m,n,i,count1,count2,count,x; cin>>t; while(t--) { count=0; count1=0; count2=0; cin>>m>>n; for(i=n+1;i<=m;i++) { x=i; while(x%2==0) { count1++; x=x/2; } } for(i=m-n;i>=1;i--) { x=i; while(x%2==0) { count2++; x=x/2; } } count=count1-count2; cout<<count<<endl; } return 0; }
相关文章推荐
- 搜索专题题解
- javascript性能优化
- 【Android Studio快捷键】之导入相应包声明(import packages)
- 日经社説 20150717 本音の安保論議で理解深める努力を
- iOS开发-Day4-C的复习
- 根据开源项目的源代码生成相应的帮助文档
- VS2012变化的快捷键
- [C#] 谈谈异步编程async await
- Android Studio 使用笔记:给包重命名~~有点水
- 多态性 与 静态绑定
- IList, ICollection ,IEnumerable AND IEnumerator in C#
- SQL 数字、文本相互转换
- CSU 1559
- Windows下安装Django
- 常用结构体
- makefile的VPATH和vpath
- 关于 linux disable irq
- 获取两个日期之间的间隔天数
- 日经社説 20150717 新競技場の見直しは当然だ
- 笔试——软件测试