Найти, является ли данное число идеальным квадратом или нет? - PullRequest
0 голосов
/ 09 мая 2020
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

Я не понимаю, почему он не работает. Мне этот код кажется нормальным. Есть предложения?

1 Ответ

0 голосов
/ 09 мая 2020

Поскольку 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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...