简体   繁体   English

查找给定的数字是否是完全平方?

[英]Find if given number is perfect square or not?

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;
}

My code is failing for n=808201我的代码因n=808201失败

I'm not getting why it's not working.我不明白为什么它不起作用。 This code looks Ok to me.这段代码对我来说看起来不错。 Any suggestions?有什么建议么?

Because mid * mid exceding int range.因为mid * mid超出了 int 范围。

for n=808201, you fail at mid = 300325, change to long value对于 n=808201,您在 mid = 300325 处失败,更改为 long 值

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);
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM