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((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 = (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。
然后使用(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 = (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("结果是:", (num))
num = 17
print("初始值:", num)
solution = Solution()
print("结果是:", (num))
#适用正整数
修改为适用正整数、负数和小数的方法的代码:
import math
def isPerfectSquare(num):
# 对num取绝对值,并取其平方根的整数部分
sqrt_num = int((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 = (num)
# 判断平方根是否为整数或近似整数
if int(sqrt_num) ** 2 == num or abs(int(sqrt_num+0.5) ** 2 - num) < 1e-9:
return True
else:
return False
#首先对负数进行特殊情况判断,直接返回 False。然后,使用 () 函数计算 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 = (num)
return is_square, sqrt_value
# 主函数
if __name__ == '__main__':
num = 9
print("初始值:", num)
solution = Solution()
is_square, sqrt_value = (num)
print("是否为完全平方数:", is_square)
print("sqrt(num):", sqrt_value)
num = 17
print("初始值:", num)
solution = Solution()
is_square, sqrt_value = (num)
print("是否为完全平方数:", is_square)
print("sqrt(num):", sqrt_value)
import math
def isPerfectSquare(num):
if num < 0:
return False, None # 负数不是完全平方数
sqrt_num = (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 = (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 = (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("平方根:", (num))
num = 17
print("初始值:", num)
result = isPerfectSquare(num)
print("是否为完全平方数:", result)
print("平方根:", (num))
"""
首先引入math模块,然后定义了一个名为isPerfectSquare的函数,
用于判断num是否为完全平方数。接着,我们使用函数获取num的整数平方根,
并将其存储在sqrt_num变量中。最后,通过比较sqrt_num的平方和num本身,判断num是否为完全平方数。
在主函数中,我们分别测试了num=9和num=17的情况,
并打印了判断结果(布尔值)以及对应的平方根(使用math模块的函数获取浮点数平方根)。
"""