zoukankan      html  css  js  c++  java
  • 魔法石的诱惑

    魔法石的诱惑

    题目描述

    修 罗王远远地看见邪狼狂奔而来,问道:“慌慌张张地跑什么?” 邪狼大口大口地喘气:“我路过一家魔法石店,看到摆着那么多高阶魔法石,我就跑进去抢了一大袋。” 修罗王怒道:“光天化日,朗朗乾坤,众目睽睽之下,你也敢抢?” 邪狼:“我抢魔法石的时候,压根儿就没看见人,眼里只看见魔法石了。” 修罗王:“……” 其实邪狼的贪婪很容易理解,因为高阶魔法石有一个特征,即它的重量进行阶乘运算后末尾有几个0,就拥有同等重量普通魔法石几倍的魔法力。例如 5!=5×4×3×2×1=120,而120结尾包含1个零,这意味着该魔法石拥有同等重量的普通的魔法石1倍的魔法力。你的任务是找到最小自然数N,使 N!在十进制下包含Q个零。

    输入

    一个数Q(0≤Q≤108

    输出

    如果误解,输出“No solution”,否则输出N。

    样例输入

    2
    

    样例输出

    10
    当0 < n < 5时,f(n!) = 0;
      当n >= 5时,f(n!) = k + f(k!), 其中 k = n / 5(取整)。
     
      n!后多少个零。数学问题。有多少个与5有关。
    知道这一点后,不难找出有q个零的n!。  范围从5-2<<31-1 用二分法也不过找30次。
     
    #include <cstdio>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    int jc(int n){  //求n!后的0的个数
        int sum=0;
        while(n){
            sum+=n/5;
            n/=5;
        }
        return sum;
    }
    int erfen(int n,int low ,int hight){
        int mid,c ;
        while(low<=hight){
            mid =(low+hight)/2;
            c=jc(mid);
            if(c==n)    return mid;
            else
                if(c>n) hight = mid-1;
            else low=mid+1;
        }
        return -1;
    }
    int main(){
        int n,ans;
        scanf("%d",&n);
        if(n==0)    printf("1
    ");
        else{
            ans=erfen(n,5,200000000);
            if(ans==-1) printf("No solution
    ");
            else{
                ans=ans-ans%5;
                printf("%d
    ",ans);
            }
        }
    }

  • 相关阅读:
    java集合源码
    数据库表链接的几种方式
    面试题(RabbitMQ)
    常见面试题(Redis)
    某奥笔试题
    Servlet
    1——Django的基础及环境搭建
    6.13---example
    6.12---知道参数的重要性------插入数据-删除数据-修改数据注意Map
    6.12---前提两个对象的成员必须一致,才能将有数据的对象将数据传给反射获取的对象conver(有数据对象,目标对象)
  • 原文地址:https://www.cnblogs.com/acmtime/p/5715846.html
Copyright © 2011-2022 走看看