Avatar ·

如何快速判断一个整数的平方根是否为整数(在Java中)?

问题

大家好!我是一名初学Java的开发者,遇到一个任务:需要判断一个整数的平方根是否为整数(即完全平方数)。例如,16返回true(4),20返回false。 我写了一个简单的循环方法,但对于大数(例如10^12)运行速度很慢。尝试过Math.sqrt(),但担心double的舍入错误。下面是我的当前代码: ```java public static boolean isPerfectSquare(int n) { if (n < 0) return false; for (int i = 0; i * i <= n; i++) { if (i * i == n) return true; } return false; } ``` 这个方法能运行,但当n = 2_147_483_647(int最大值)时,循环执行约46340次迭代,速度很慢。我听说可以用二分查找或浮点数技巧。但如何做到可靠且快速?需要一个适用于所有int(包括负数)且不会因double而出错的解决方案。请告诉我最优方法!