• LightOJ1138Trailing Zeroes (III)二分+求N!末尾0


    You task is to find minimal natural number N, so that N! contains exactly Q zeroes on the trail in decimal notation. As you know N! = 1*2*...*N. For example, 5! = 120, 120 contains one zero on the trail.

    Input

    Input starts with an integer T (≤ 10000), denoting the number of test cases.

    Each case contains an integer Q (1 ≤ Q ≤ 108) in a line.

    Output

    For each case, print the case number and N. If no solution is found then print 'impossible'.

    Sample Input

    3

    1

    2

    5

    Sample Output

    Case 1: 5

    Case 2: 10

    Case 3: impossible

    题意:

      给出一个Q,求出最小的n的阶乘的末尾0(后导)的个数为Q 。

    思路:

      0是由2*5组成的,也就是相当于一个偶数乘上一个5的倍数,而偶数肯定是跟在5的前面的,所以只需要求出5的倍数(包括5)的个数即可。

    注意:

      N的范围、求的是最小的N(需要取区间左边)

     1 #include<stdio.h>
     2 #include<iostream>
     3 const int N=500000020;
     4 using namespace std;
     5 
     6 int findzero(int x)
     7 {
     8     int sum=0;
     9     while(x)
    10     {
    11         sum=sum+x/5;
    12         x=x/5;
    13     }
    14     return sum;
    15 }
    16 
    17 int erfen(int x)
    18 {
    19     int L=0,R=N,mid;
    20     while(L<=R)
    21     {
    22         mid=L+((R-L)>>1);
    23         if(findzero(mid)<x)
    24         {
    25             L=mid+1;
    26         }
    27         else
    28         {
    29             R=mid-1;
    30         }
    31 //        else if(findzero(mid)==x)
    32 //        {
    33 //            return L;
    34 //        }
    35     }
    36     if(findzero(L)==x)
    37         return L;
    38     return 0;
    39 }
    40 
    41 
    42 int main()
    43 {
    44     int n,tt=1,t,q;
    45     scanf("%d",&t);
    46     while(t--)
    47     {
    48         scanf("%d",&q);
    49         int ans=erfen(q);
    50         if(ans==0)
    51             printf("Case %d: impossible\n",tt++);
    52         else
    53             printf("Case %d: %d\n",tt++,ans);
    54 
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    2804 最大最小数质因数
    5429 多重背包
    1851 越狱
    Gvim使用
    3622 假期
    4906 删数问题
    2845 排序的代价
    poj 3352
    常用正则表达式汇总
    功能简单例子
  • 原文地址:https://www.cnblogs.com/OFSHK/p/11335641.html
Copyright © 2020-2023  润新知