据章晟大佬说这是一道水题。
题目描述
使得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 ;
}
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。。。