https://leetcode.com/problems/sqrtx/
这道题 由于数字可能很大 先找大约的值 以10倍数递增 确定范围
然后二分法
如果刚好是完全平方根 就在while里 return (s+e)/2
否则 最后会确定到s,e 其中e=s+1 而真正的平方根是在s和e之间的float
所以s**2<x<e**2
这种情况下 直接返回s
class Solution:
# @param {integer} x
# @return {integer}
def mySqrt(self, x):
if x<1:
return 0
e=10
while e<=x/e:
e=e*10
#e2>x
s=e/10
while s!=e-1:
if ((s+e)/2)**2<x:
s=(s+e)/2
elif ((s+e)/2)**2>x:
e=(s+e)/2
else:
return (s+e)/2
return s