算法分享之判断平方数
算法任务
在本次任务中需要完成给定一个数字,判断该数是不是一个完全平方数。如果是完全平方数,则返回该数的平方根,如果不是,则返回-1。(程序语言:python)
第一种:使用高级库函数
思路:可以想将该数求平方跟,然后将结果向下取整再与上一步结果相减。若为0,则是完全平方数,否则不是。
代码:
import math
def judgeSquareNumber(x):
temp=math.sqrt(x)
y=temp-math.floor(temp)
if y==0:
return temp
return -1
第二种:采用二分法
思路:本思路主要采用二分法查值的思路,来确定一个数是否为完全平方数。首先挑选左值和右值,左值可以为0,右值可以为原值减1,每次挑选左值和右值的中间数的平方与原值进行对比,若大于原值,则将右值跟新为中间数,若小于原值,则将左值跟新为中间值,若等于原值则退出并返回中间值,或者当右值减1等于左值时退出并返回-1.
代码:
import math
def judgeSquareNumber_1(x):
left=0
right=x-1
if left==right:
return 1
while (right-1)>left:
middle=int((right+left)/2)
if math.pow(middle,2)>x:
right=middle
elif math.pow(middle,2)<x:
left=middle
else:
return middle
return -1