#问题

据章晟大佬说这是一道水题。

题目描述

使得x^x达到或超过n位数字的最小正整数x是多少?n<=2000000000

输入格式

输入一个正整数n。

输出格式

输出使得x^x达到n位数字的最小正整数x。

样例数据

input

11

output

10
一道入门级别的二分答案。
#include <bits/stdc++.h>
using namespace std ;
int n ;
double num ;
int main ()
{
int mid ,ans = 0 ;
int lleft = 0 ,rright = 2000000001 ;
scanf ( "%d" ,&n );
while (lleft +1 <rright )
{
    mid =(lleft +rright )/ 2 ;
num =( double )(mid *( log10 (mid ))+ 1 );
if (num >=n * 1.0 ) rright =mid ;
else lleft =mid ;
// cout<<lleft<<' '<<rright<<endl;
}
if (lleft * log10 (lleft )+ 1 ==n ) ans =lleft ;
else ans =rright ;
printf ( "%d" ,ans );
return 0 ;
}
这样子可以达到ac

但是在num =( double )(mid *( log10 (mid ))+ 1 );这一句中,明明我需要的num以整形存在就好,为什么依照书本上是double呢?(询问了大佬没能得到答案)double记录小数,但在整个过程中只需要整数就行emmmm我很懵逼emm。
之前写的Int出来的答案一直是0,章大佬也表示很懵逼,然后我们开始尝试各种改动,在于章大佬交谈的过程中收获还是很丰富的,,只是耽误了大佬们的时间惹emmm。努力成为大佬QWQ。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值