题解 P2293 【[HNOI2004]高精度开根】
我来发一波python题解
这题首先我想到的是用py自带的pow函数运算
于是我敲出了以下代码
import math
a=int(input())
b=int(input())
print(math.floor(math.pow(b,1/a)+0.000000001))
注意事项:
1.除号打一个就行了,打2个就成了向下取整
2.后面加一个很小的数是防止精度误差,不加的话样例都过不了
但是这是过不了的,只有50,后面会RE
100分代码的思想与c++一样也是二分答案,只不过py因为自带高精要方便一些
下面是100分代码
a=int(input())
b=int(input())
l=0
r=1
while(r**a<=b): #打2个乘号就是乘方的意思
l=r;r=r*2 #先获得l,r初值
while(l+1<r): #以下都是二分,可以注意一下while和if的用法
mid=(l+r)//2
if (mid**a<=b):
l=mid
else:
r=mid
if (l**a<=b):
print(l)
else:
print(r)
代码虽不长,但用来学习py语法还是不错的!