如何快速检查一个整数的平方根是否为整数?
大家好!我是一名初学Java开发者,遇到了一个问题:需要判断一个整数的平方根是否为整数(即该数是否为完全平方数)。例如,25是(5),26不是。
一开始我这样写:
```java
public static boolean isPerfectSquare(int n) {
double sqrt = Math.sqrt(n);
return sqrt == Math.floor(sqrt);
}
```
但后来我想:由于double的精度误差,对于大数会不会出错?比如n = 2147483647(最大int)或边界附近。也许最好用整数运算?但怎么做呢?
我尝试过用循环:
```java
for (int i = 1; i * i <= n; i++) {
if (i * i == n) return true;
}
return false;
```
但对于大n来说太慢了。有没有更快的方法?我在网上看到过二分查找,但不确定如何应用。我需要针对Java,并且能处理从0到Integer.MAX_VALUE的所有int。请指教,最有效的做法是什么?