• 奇怪的函数 (codevs 3538/1696) 题解


    【题目描述】

         给定n,使得x^x达到或超过n位数字的最小正整数x是多少?

    【样例输入】

         11

    【样例输出】

        10

    【解题思路】

         首先想到枚举,但是范围有点大,n<=2*10^9,果断用二分。其实这道题并不难,要用到一个求位数的公式trunc(t*(ln(t)/ln(10)))+1,初三自然是没学的,直接抄上公式,AC……,二分的时候注意一下退出的条件。(wikioi上1696和3538的题目不一样,但同一个程序都能AC,也不知道1696中的k是干嘛的……)

    【代码实现】

     1 var n:qword;
     2 function js(t:longint):qword;
     3 begin
     4  if t=1 then
     5   js:=1
     6  else
     7  js:=trunc(t*(ln(t)/ln(10)))+1;
     8 end;
     9 procedure ef(l,r:longint);
    10 var m:longint;
    11 begin
    12  if l=r then//退出条件,如果l=m,js(m)>=n,就无法二分了,也不难证明这个即为答案。同理,m+1与r一个意思
    13   begin
    14    writeln(l);
    15    exit;
    16   end;
    17  m:=(l+r)div 2;
    18  if js(m)>=n then//比n大,往左走,
    19   ef(l,m)
    20  else
    21   ef(m+1,r);
    22 end;
    23 begin
    24  readln(n);
    25  ef(1,2000000000);
    26 end.
    奇怪的函数
  • 相关阅读:
    Ubunut 安装 Mariadb 数据库
    编译 APISIX
    Watchtower 自动更新 Docker 镜像与容器
    Drone 教程
    异步任务工具类
    Html 转 PDF
    数据中台
    九大数据分析方法:指标拆解法
    用户画像
    Hudi的更新机制
  • 原文地址:https://www.cnblogs.com/PengBoLiuXu/p/4483796.html
Copyright © 2020-2023  润新知