long long int floorSqrt(long long int x)
{
// Your code goes here
long long int l=0 , r = x, ans;
while(l<=r){
long long int mid= (int)(l+r)/2;
long long int m = mid*mid;
if( m == x){
return mid;
}
if(mid>= (int)x/mid){
r = mid -1;
}
if( mid <=(int)x/mid){
l = mid+1;
ans = mid;
}
}
return ans;
}
这是计算给定数字X的平方根的函数,使用二进制搜索在o(logn)中完成我使用的是GFG代码编译器,使用的是gcc5.4
您可以尝试更改函数:
long long int floorSqrt(long long int x)
{
// This will make sqrt(1) = 1, sqrt(0) = 0
if (x < 2) {
return x;
}
...
使得将处理将导致CCD_ 1永远等于CCD_ 2的任何x值。或者,你可以在while循环中检查mid == 0
,然后再除以它