c++ sqrt的递归二分搜索

fdbelqdn  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(161)
#include <bits/stdc++.h> 

int binarySearch(long long int N,int start,int end, int& num){

    

    long long int mid = start + (end-start)/2;
    //cout<<"Start: "<<start << " End: " <<  end<<" Mid: "<<mid<<endl;
    long long int square = mid*mid;
    if(start>end){
        return num;
    }
    
    if(square<=N){
        num = mid;
        start = mid+1;
    }else{
        end = mid-1;
    }

    binarySearch(N,start,end,num);

    return num;

}

int sqrtN(long long int N)
{
    int start = 0;
    int end = N;

    int sqrt = 0;

    binarySearch(N, start, end, sqrt);

    return sqrt;
}

我正在写一个用递归二进制搜索求平方根的代码。在我的这个代码中,它对于非常大的数字是失败的,有人能帮助我解决这个问题吗

nbnkbykc

nbnkbykc1#

此计算

long long int square = mid*mid;

可能导致整数溢出。
条件

square<=N

应为:

(mid == 0 || mid <= LLONG_MAX / mid) && square<=N

相关问题