Avatar ·

如何快速检查一个整数的平方根是否为整数?

大家好!我是一名初学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。请指教,最有效的做法是什么?