Python算法例2 判断平方数

1.问题描述

给定一个正整数num,判断是否为完全平方数,要求当num为完全平方数时返回True,否则返回False。

2. 问题示例

输入num=9,输出True,sqrt(16)=3;输入num=17,输出False,sqrt(17)=4.12。

3.代码实现

给定一个正整数num,判断是否为完全平方数,要求当num为完全平方数时返回True,否则返回False:

import math

def isPerfectSquare(num):
    # 对num开平方并取整
    sqrt_num = int(math.sqrt(num))

    # 判断sqrt_num的平方是否等于num
    if sqrt_num * sqrt_num == num:
        return True
    else:
        return False

# 测试以下:
print(isPerfectSquare(9))  # 输出True
print(isPerfectSquare(17))  # 输出False
# 需要注意的是,这个方法只适用于正整数,对于负数或小数会得到错误的结果。
# 使用二分查找法(也叫折半查找法)来判断一个正整数是否为完全平方数
def isPerfectSquare(num):
    # 对num特殊情况进行判断
    if num < 1:
        return False
    if num == 1:
        return True

    # 定义左右边界
    left, right = 1, num // 2

    # 进行二分查找
    while left <= right:
        mid = (left + right) // 2  # 计算中间位置的数值
        if mid * mid == num:  # 如果找到了num的平方根,返回True
            return True
        elif mid * mid > num:  # 平方根大于num,说明在左半部分,更新右边界
            right = mid - 1
        else:  # 平方根小于num,说明在右半部分,更新左边界
            left = mid + 1

    # 没有找到平方根,返回False
    return False

# 测试
print(isPerfectSquare(9))  # 输出True
print(isPerfectSquare(17))  # 输出False
import math

def is_square(num):
    sqrt_num = math.sqrt(num)
    return sqrt_num == int(sqrt_num)

num = 9
print(is_square(num))  # 输出 True

num = 17
print(is_square(num))  # 输出 False
#使用于正数,即大于等于0的数
"""
首先导入了math模块,然后定义了一个名为isPerfectSquare的函数,
它接受一个参数num,首先检查num是否小于0,
如果是,则返回False。
然后使用math.isqrt(num)来计算num的整数平方根,
将其存储在sqrt_num中,最后检查sqrt_num的平方是否等于num,
如果是,则返回True,否则返回False。
然后,程序要求用户输入一个正整数num,
调用isPerfectSquare函数来判断是否为完全平方数,
并输出结果True或False。
"""
import math

def isPerfectSquare(num):
    if num < 0:
        return False
    sqrt_num = math.isqrt(num)  # 计算num的整数平方根
    return sqrt_num * sqrt_num == num

# 输入num的值
num = int(input("请输入一个正整数: "))

result = isPerfectSquare(num)

print(result)
class Solution:
    def isPerfectSquare(self, num):
        l = 0
        r = num
        while r - l > 1:
            mid = (l + r) // 2  # 使用整数除法
            if mid * mid < num:
                l = mid + 1
            else:
                r = mid
        return l * l == num

# 主函数
if __name__ == '__main__':
    num = 9
    print("初始值:", num)
    solution = Solution()
    print("结果是:", solution.isPerfectSquare(num))

    num = 17
    print("初始值:", num)
    solution = Solution()
    print("结果是:", solution.isPerfectSquare(num))
#适用正整数

 修改为适用正整数、负数和小数的方法的代码:

import math


def isPerfectSquare(num):
    # 对num取绝对值,并取其平方根的整数部分
    sqrt_num = int(math.sqrt(abs(num)))

    # 判断sqrt_num的平方是否等于num的绝对值
    if sqrt_num * sqrt_num == abs(num):
        return True
    else:
        return False

print(isPerfectSquare(9))  # 输出True
print(isPerfectSquare(17))  # 输出False
print(isPerfectSquare(-16))  # 输出True,sqrt((-16)^2) = 16
print(isPerfectSquare(2.25))  # 输出False
import math

def isPerfectSquare(num):
    # 对num特殊情况进行判断
    if num < 0:
        return False

    # 计算平方根
    sqrt_num = math.sqrt(num)
    
    # 判断平方根是否为整数或近似整数
    if int(sqrt_num) ** 2 == num or abs(int(sqrt_num+0.5) ** 2 - num) < 1e-9:
        return True
    else:
        return False
#首先对负数进行特殊情况判断,直接返回 False。然后,使用 math.sqrt() 函数计算 num 的平方根,将结果保存在 sqrt_num 变量中。接下来,我们通过两种方式判断 sqrt_num 是否为整数或近似整数。第一种方式是将 sqrt_num 转换为整数后再进行平方判断;第二种方式是通过比较 sqrt_num + 0.5 的平方与 num 的差值是否在一个很小的范围内(这里设定为 1e-9)。
print(isPerfectSquare(9))  # 输出 True
print(isPerfectSquare(17))  # 输出 False
print(isPerfectSquare(-16))  # 输出 False
print(isPerfectSquare(2.25))  # 输出 False

import math

class Solution:
    def isPerfectSquare(self, num):
        l = 0
        r = num
        while r - l > 1:
            mid = (l + r) // 2  # 使用整数除法
            if mid * mid < num:
                l = mid + 1
            else:
                r = mid
        is_square = l * l == num
        sqrt_value = math.sqrt(num)
        return is_square, sqrt_value

# 主函数
if __name__ == '__main__':
    num = 9
    print("初始值:", num)
    solution = Solution()
    is_square, sqrt_value = solution.isPerfectSquare(num)
    print("是否为完全平方数:", is_square)
    print("sqrt(num):", sqrt_value)

    num = 17
    print("初始值:", num)
    solution = Solution()
    is_square, sqrt_value = solution.isPerfectSquare(num)
    print("是否为完全平方数:", is_square)
    print("sqrt(num):", sqrt_value)
import math

def isPerfectSquare(num):
    if num < 0:
        return False, None  # 负数不是完全平方数

    sqrt_num = math.isqrt(num)  # 计算num的整数平方根
    return sqrt_num * sqrt_num == num, sqrt_num

# 输入num的值
num = int(input("请输入一个正整数: "))
is_square, sqrt_value = isPerfectSquare(num)

if is_square:
    print("是完全平方数: True")
else:
    print("不是完全平方数: False")

if sqrt_value is not None:
    print("sqrt(num) =", sqrt_value)
import math

def isPerfectSquare(num):
    if num < 0:
        return False, None  # 负数不是完全平方数

    sqrt_num = math.sqrt(num)  # 计算num的平方根(浮点数)
    return sqrt_num.is_integer(), sqrt_num

# 输入num的值
num = int(input("请输入一个正整数: "))
is_square, sqrt_value = isPerfectSquare(num)

if is_square:
    print("是完全平方数: True")
else:
    print("不是完全平方数: False")

if sqrt_value is not None:
    print("sqrt(num) =", sqrt_value)
#计算了num的平方根(浮点数),然后使用sqrt_num.is_integer()来检查sqrt_num是否为整数,
# 如果是,则返回True,否则返回False。
# 在输出部分,它输出了结果是否为完全平方数的布尔值以及sqrt(num)的值,
# 如果不是完全平方数,sqrt_value将为浮点数。
import math

def isPerfectSquare(num):
    if num < 0:
        return False
    
    sqrt_num = math.isqrt(num)  # 使用math模块的isqrt函数获取整数平方根
    
    if sqrt_num * sqrt_num == num:
        return True
    else:
        return False

# 主函数
if __name__ == '__main__':
    num = 9
    print("初始值:", num)
    result = isPerfectSquare(num)
    print("是否为完全平方数:", result)
    print("平方根:", math.isqrt(num))

    num = 17
    print("初始值:", num)
    result = isPerfectSquare(num)
    print("是否为完全平方数:", result)
    print("平方根:", math.sqrt(num))

"""
首先引入math模块,然后定义了一个名为isPerfectSquare的函数,
用于判断num是否为完全平方数。接着,我们使用math.isqrt函数获取num的整数平方根,
并将其存储在sqrt_num变量中。最后,通过比较sqrt_num的平方和num本身,判断num是否为完全平方数。

在主函数中,我们分别测试了num=9和num=17的情况,
并打印了判断结果(布尔值)以及对应的平方根(使用math模块的math.sqrt函数获取浮点数平方根)。
"""

  • 27
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北辰星Charih

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值