本题源自LeetCode
----------------------------------------------------------
1 牛顿逼近法。
int sqrt(int x) {
if(x<2)
return x;
long r=x;
while(r*r>x){
r=(r+x/r)/2;
}
return r;
}
2 二分逼近法
int sqrt(int x) {
if(x<2)
return x;
int left=1;
int right=x/2;
int result=0;
while(left<=right){
int mid=(right+left)/2;
if(x/mid>mid){ //不能用 mid* mid 会出现溢出
left=mid+1;
result=mid;
}else if(x/mid<mid){
right=mid-1;
}else{
return mid;
}
}
return result;
}