• 找0的个数


    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?

    cid=84658#problem/A
    解析:
    /*
    对于一个数n,求出它的末尾有几个0,仅仅需看n之内的数的质因子5的个数,由于2的个数远多于5。

    所以可知道一个数末尾0的个数
    Q = n/5 + n/(5^2) + n/(5^3) + …
    而题目给出的是Q,要求出的是N,由于是要求出最小的自然数,所以N必然是5的倍数。这点不多做解释。
    依据等比数列的求和公式。有
    Q = N*(5^k - 1) / [4*(5^k)]。由此得
    N = 4*Q * [(5^k)/(5^k-1)]
    注意到 1 < (5^k)/(5^k-1) <= 5/4,且当k->无穷时。(5^k)/(5^k-1)->1,所以可先算出N=4Q的末尾零的个数与所给的Q比較。显然所求的数就在4Q的附近,所以不须要二分查找。
    */

    #include <iostream>
    #include <cstdio>
    using namespace std;
    
    int get(int m)
    {
        int sum=0;
        while(m)
        {
            sum+=m/5;
            m/=5;
        }
        return sum;
    }
    int main()
    {
        int m;
        while(~scanf("%d",&m))
        {
            if(m == 0)//注意0的时候是输出1,不是0,尽管0是自然数
            {
                puts("1");
                continue;
            }
            int s=4*m/5*5;
            while(get(s) < m)
            {
                s+=5;
            }
            if(get(s) == m)
               printf("%d
    ",s);
            else
               puts("No solution");
        }
        return 0;
    }
    
  • 相关阅读:
    Java ListIterator(迭代器)
    java 异常 throw
    java iterator(迭代器)
    java list
    type Iterator does not take parameters
    Java 容器的打印
    java 添加一组元素
    Java 容器的基本概念
    软件
    java 学习网站
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7365976.html
Copyright © 2020-2023  润新知