• CF Manthan, Codefest 16 B. A Trivial Problem


    数学技巧真有趣,看出规律就很简单了 wa

    题意:给出数k  输出所有阶乘尾数有k个0的数

    这题来来回回看了两三遍, 想的方法总觉得会T

    后来想想  阶乘 emmm  1*2*3*4*5*6*7*8*9*10...*n 尾数的0只与5有关

    是5的几倍就有几个0  因为5前面肯定有偶数 乘起来就有一个0 而且最后输出肯定是连续的5个

    hhh 兴奋 开始上手 乱搞一下  发现复杂度还行  

    测样例 发现 k=5 的时候不对了 输出25~29了 应该是0的

    咦  测了一下 25!应该是6个0的 25=5*5  有两个5  wa 

    每次循环找的时候都判断是否是5的倍数,是则不断除5,计数累加; 否则继续下一循环

    hhh 又乱搞了一下 A了

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cmath>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<map>
    #include<queue>
    #include<stack>
    #include<list>
    #include<set>
    using namespace std;
    typedef long long ll;
    typedef pair<ll,ll> p;
    typedef long double ld;
    #define mem(x) memset(x, 0, sizeof(x))
    #define me(x) memset(x, -1, sizeof(x))
    #define fo(i,n) for(i=0; i<n; i++)
    #define sc(x) scanf("%lf", &x)
    #define pr(x) printf("%lld
    ", x)
    #define pri(x) printf("%lld ", x)
    #define lowbit(x) x&-x
    const ll MOD = 1e18 +7;
    const ll N = 6e6 +5;
    int main()
    {
        ll i, j, k, l=0;
        ll n, m, t=5;
        cin>>k;
        ll co=1;
        while(1)
        {
            if(co>=k) break;
            t+=5; //不断+5 统计5的个数
            m=t;
            while(m%5==0)  //统计该数有几个5
            {
                m/=5;
                co++;
            }
        }
        if(co>k)
        {
            cout<<0<<endl;
            return 0;
        }
        cout<<5<<endl;
        for(i=t;i<=t+4; i++)
        {
            cout<<i<<' ';
        }cout<<endl;
        return 0;
    }
  • 相关阅读:
    String的equals和hashCode方法
    查看oracle中表的索引
    初识RESTful
    linux安装字体库(simSun为例)
    排序之快排(JS)
    面向对象的三个基本特征 和 五种设计原则
    排序之希尔排序(JS)
    关于正则表达式
    Oracle 表分区介绍与使用
    一个复杂关联的sql
  • 原文地址:https://www.cnblogs.com/op-z/p/10791159.html
Copyright © 2020-2023  润新知