好题收集(2)

来源:互联网 发布:杭州博远软件 编辑:程序博客网 时间:2024/05/13 19:22

奇怪的函数

Description

洛谷P2759
使得xx达到或超过 n 位数字的最小正整数 x 是多少?

Hint

乍一看是一道数学题
其实就是一道数学题
ab 进制下的位数 p 的计算公式为 p=logba+1
其实很好理解:
x表示不超过 x 的最大整数,若 n=(ak,ak1,...a1,a0)b,ak0,

bkn<bk+1klogbn<k+1

k=logbn,总位数 p=k+1
所以xx的位数就是lgxx+1,运用对数知识就是xlgx+1
然后考虑到对数函数是单调的,所以可以用二分答案

Code

#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define LL long longusing namespace std;LL n,l=1,r=2e9;int main(){    scanf("%lld",&n);    while(l<r){        LL mid=(l+r)>>1,len=(LL)(mid*log10(1.0*mid))+1;        if(len<n) l=mid+1;        else r=mid;    }    cout<<l<<endl;    return 0;}