Java8使用Math.sqrt判断数值是否为完全平方数的实现方法
Java8 判断完全平方数的实现方案
核心思路
完全平方数的平方根为整数,因此只需计算目标数的平方根后取整,再将取整结果平方,判断是否与原数相等即可。注意负数没有实数平方根,可直接判定为非完全平方数。
1. 整数输入的最简实现
针对int/long类型的整数输入,实现代码如下:
public static boolean isPerfectSquare(long num) { // 负数直接返回false if (num < 0) { return false; } long sqrt = (long) Math.sqrt(num); return sqrt * sqrt == num; }
测试效果
- 输入
25:Math.sqrt(25)得到5.0,取整后5*5=25,返回true - 输入
49:Math.sqrt(49)得到7.0,取整后7*7=49,返回true - 输入
30:Math.sqrt(30)得到5.477225575051661,取整后5*5=25≠30,返回false
2. 浮点数输入的实现
如果需要支持double类型输入,需要增加极小的误差阈值规避浮点精度问题:
public static boolean isPerfectSquare(double num) { if (num < 0) { return false; } double sqrt = Math.sqrt(num); // 1e-9为误差容忍阈值,可根据实际需求调整 return Math.abs(sqrt - Math.rint(sqrt)) < 1e-9; }
内容的提问来源于stack exchange,提问作者Jeff Cook
相关产品推荐
相关产品推荐

