zoukankan      html  css  js  c++  java
  • 1021: 组合数末尾的零

    题目:

    Description

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

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

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

     

    Input

     第一行是测试样例的个数T,接下来是T个测试样例,每个测试样例占一行,有两个数,依次是mn,其中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;

     

    注:如果求出组合数后再去求末尾有几个零会超内存;因为题目所要求的范围。

     

     1 #include<iostream>
     2 using namespace std;
     3 int main()
     4 {
     5     int t,m,n,i,count1,count2,count,x;
     6       cin>>t;
     7 while(t--)
     8 {
     9     count=0;
    10     count1=0;
    11     count2=0;
    12 cin>>m>>n;
    13 for(i=n+1;i<=m;i++)
    14 {
    15    x=i;
    16    while(x%2==0)
    17 {
    18    count1++;
    19    x=x/2;
    20 }
    21 }
    22 for(i=m-n;i>=1;i--)
    23 {
    24   x=i;
    25 while(x%2==0)
    26 {
    27   count2++;
    28   x=x/2;
    29 }
    30 }
    31 count=count1-count2;
    32 cout<<count<<endl;
    33 }
    34 return 0;
    35 }

     

     

  • 相关阅读:
    离线计算框架 MapReduce
    Hadoop概述
    Linux之rpm/yum
    Linux之磁盘分区
    利用CMD合并多个VOB文件
    android中的simple_list_item
    jquery中的跨域-jsonp格式
    安卓代码中设置ImageView属性
    Android中常用的Adapter的种类和用法
    C#导入excel文件到oracle的方法
  • 原文地址:https://www.cnblogs.com/fenhong/p/4653578.html
Copyright © 2011-2022 走看看