当前位置: 首页 > article >正文

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函数获取浮点数平方根)。
"""


http://www.kler.cn/news/108922.html

相关文章:

  • python基础语法(十一)
  • 【wespeaker】模型ECAPA_TDNN介绍
  • 【MATLAB源码-第58期】基于蛇优化算法(SO)和粒子群优化算法(PSO)的栅格地图路径规划最短路径和适应度曲线对比。
  • 【Flutter】Flutter 中的图片管理 图片优化的最佳实践
  • pandas 统计函数
  • UE5使用Dash插件实现程序化地形场景制作
  • 「实验记录」CS144 Lab0 networking warmup
  • docker 部署prometheus和grafana
  • Python之函数-函数概念
  • HTTPS协议:保障网络安全的加密通信协议
  • 一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium
  • 一个基于Excel模板快速生成Excel文档的小工具
  • Python爬虫基础之Requests详解
  • USACO12OPEN Balanced Cow Subsets G(meet in the middle)
  • TensorRT量化实战课YOLOv7量化:pytorch_quantization介绍
  • 如何公网远程访问本地WebSocket服务端
  • linux中nginx配置https
  • 读书笔记:c++对话系列,Visitor模式
  • 日本IT Week秋季展丨美格智能以技术创新共建美好数字生活
  • MES的物料管理
  • 大数据前置学习基础准备(非常详细!)
  • 二进制安装部署k8s
  • 记录使用阿里 ARoute 遇到的坑
  • 你一般什么时候会用到GPT?
  • 【每日一题Day362】LC274H 指数 | 二分答案
  • 【Leetcode】【每日一题】【中等】274. H 指数
  • Python selenium交互
  • 数据结构───链表
  • JavaScript_Pig Game保存当前分数
  • nginx请求时找路径问题