算法分享之判断平方数

算法任务

在本次任务中需要完成给定一个数字,判断该数是不是一个完全平方数。如果是完全平方数,则返回该数的平方根,如果不是,则返回-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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值