zoukankan      html  css  js  c++  java
  • XidianOJ 1019 自然数的秘密

    题目描述

    题意: 已知:N!=N*(N-1)*...*2*1 找到最小自然数 N, 使N!末尾有连续 M个零. 例如, 5! 的结尾包含1个零.

    输入

    第一行输入一个整数T,表示有T组测试数据。 对于每组测试数据,输入一个整数M,表示包含M个零。(0<=M<=10^8)

    输出

    每组数据,输出一行满足条件的最小自然数N。 如果无解,输出“No solution”。(不含引号)

    --

    正文

    对于n!,可以算出他末尾的0

    10!
    零的个数可以由这样算出
    10/5=2
    2/5=0
    0的个数就是2+0=2,再来个例子,2008
    2008/5=401
    401/5=80
    80/5=16
    16/5=3
    0的个数就是401+80+16+3=500个零

    在一个肯定ok的范围内二分找就好

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <cstdlib>
    #include <algorithm>
    using namespace std;
    
    typedef long long LL;
    #define MAXN 500000000
    LL f(LL n){
        LL res = 0;
        while (n >= 5) {
            n /= 5;
            res += n;
        }
        return res;
    }
    
    LL findm(LL left,LL right,LL m){
    //    printf("%lld %lld
    ",left,right);
        if (left == right){
            if (f(left) != m)
                return 0;
            else 
                return left;
        }
        if (left == right - 1){
            if (f(left) != m){
                if (f(right) != m){
                    return 0;
                }
                else return right;
            }
            else 
                return left;
        }
        LL mid = (left+right)/2;
        LL fmid = f(mid);
        if ( m > fmid ){
            return findm(mid,right,m);
        } 
        else
            return findm(left,mid,m);
    }
    
    int main(){
        int time,T;
        scanf("%d",&T);
        for (time=1;time<=T;time++){
            LL m;
            scanf("%lld",&m);
            LL res = findm(1,MAXN,m);
            if (res == 0){
                printf("No solution
    ");
            }
            else printf("%lld
    ",res);
        }
        return 0;
    } 
  • 相关阅读:
    Kubernetes 部署微服务电商平台(16)
    Android开发如何去除标题栏title
    eclipse中logcat偶尔不显示log的问题解决办法
    Two Sum
    事件的解除与绑定
    使用 Canvas 绘图
    表单脚本
    事件
    DOM2 和 DOM3
    DOM扩展
  • 原文地址:https://www.cnblogs.com/ToTOrz/p/6106471.html
Copyright © 2011-2022 走看看