java - 判断给定的数是否是完全平方数?

标签 java algorithm

public boolean isPerfectSquare(int n) {
    int l=1, r=n;
    if(r==l) return true;
    return searchBinary(l, r, n);
}
public boolean searchBinary(int l, int r, int n){
    if(r>l){
        int mid=l+(r-l)/2;
      //  System.out.println(l + " " + r + " " + mid + " " +n);
        if(mid*mid == n) return true;
        else if(mid*mid>n) return searchBinary(l, mid-1, n);
        else return searchBinary(mid+1, r, n);
    }
    return false;
}

我的代码 n=808201 失败

我不明白为什么它不起作用。这段代码对我来说看起来不错。有什么建议吗?

最佳答案

因为mid * mid超出了int范围。

对于 n=808201,在 mid = 300325 处失败,更改为长值

public static boolean isPerfectSquare(int n) {
        int l=1, r=n;
        if(r==l) return true;
        return searchBinary(l, r, n);
    }
    public static boolean searchBinary(long l, long r, int n){
        if (l > r) {
            return false;
        }
        long mid=(r + l) >> 1;
        //  System.out.println(l + " " + r + " " + mid + " " +n);
        if(mid*mid == n) return true;
        else if(mid*mid>n) return searchBinary(l, mid-1, n);
        else return searchBinary(mid+1, r, n);
    }

关于java - 判断给定的数是否是完全平方数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61695132/

相关文章:

java - Elasticsearch-提供同义词的远程文件路径

Java Web Start - 使用另一个 native 依赖项加载 native 依赖项

c - 使用三个指针反转字符串中的单词?

java - Java中的快速双值优先级队列实现

c++ - 成对函数评估算法(C++、STL)

Java Scanner 为什么我的代码中的 nextLine() 被跳过?

java - JPanel 中的多个组件未显示

php - 如何使用 MySQL 和 PHP 比较一组数字并获得最相关的结果?

java - 使用泛型 <K> 减少重复代码?

algorithm - 将整数数组拆分为尽可能多的具有相同总和的子数组