题解 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语法还是不错的!