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