Python中math.sqrt返回浮点数,如何用其正确判断正整数是否为完全平方数
完全平方数判断问题修正方案
给定正整数num,编写一个函数,如果num是完全平方数则返回True,否则返回False。
你现有代码的错误点如下:
- 硬编码了
math.sqrt(16),没有使用入参num,逻辑永远固定判断16的平方根 math.sqrt返回值始终是float类型,即使结果是整数也会表示为x.0的形式,所以判断返回类型为int永远得到False
方案1:浮点数取余判断(无int强转)
直接对math.sqrt返回的浮点数做模1运算,如果结果为0说明该浮点数是整数,对应原数就是完全平方数,不会出现4.5这类值被误判的情况。
代码如下:
import math class Solution: def isPerfectSquare(self, num: int) -> bool: sqrt_val = math.sqrt(num) return sqrt_val % 1 == 0
方案2:精度增强版(避免超大数浮点精度丢失)
如果需要处理非常大的正整数,担心math.sqrt出现浮点精度丢失,可以补充取整后平方校验的逻辑,这里的int强转只是用于校验,不会出现你担心的误判问题:非整数的平方根强转后平方必然和原数不相等。
代码如下:
import math class Solution: def isPerfectSquare(self, num: int) -> bool: sqrt_val = math.sqrt(num) int_sqrt = int(sqrt_val) return int_sqrt * int_sqrt == num
内容的提问来源于stack exchange,提问作者Mayank Maheshwari
相关产品推荐
相关产品推荐

