#问题

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

题目描述

使得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。。。

    原文作者: 汉诺塔问题
    原文地址: https://blog.csdn.net/WHS_2021/article/details/80303641
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞