大家好!我是一名初学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而出错的解决方案。请告诉我最优方法!
🍪 Мы используем файлы cookie для авторизации, аналитики и улучшения работы сайта.
Продолжая пользоваться сайтом, вы соглашаетесь с нашей
политикой конфиденциальности.