69. x 的平方根
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。
示例 1:
输入:x = 4
输出:2
示例 2:
输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。
提示:
0 <= x <= 2^31 - 1
二分法
先简单说一下平方根和算数平方根的区别,平方根是有正负两个解。比如4的平方根是正负2;4的算数平方根是+2.
def mypow(x):
s=[]
for i in range(1,65):
s.append(i)#创造一个1-64的列表64应该够用了
left,right=0,63
while left<=right:
middle=(right-left)//2+left
m=s[middle]*s[middle]
if m<x:
left=middle+1
elif m>x:
right=middle-1
else:
print(s[middle])
break
if left==right and s[left]*s[left]!=x:
print(s[left-1])#没有四舍五入,直接舍弃所有小数
break
elif left==right and s[left]*s[left]==x:
print(s[left])
break
if __name__=='__main__':
x=int(input("x="))
if x==0:#因为非负所以0要考虑
print(0)
else:
mypow(x)
结果
小结
关键是题目要求不允许使用任何指数函数和算符,那么那些便捷途径就不要想了,老老实实找那个?*?最接近x的?就行。