Implement int sqrt(int x)
.
Compute and return the square root of x.
Analysis:In an interview, they expected the solution is using binary search, not Newton's Method.
Java
public int sqrt(int x) {
long high = x;
long low = 0;
if(x<=0) return 0;
if(x==1) return 1;
while(high-low>1){
long mid = low+(high-low)/2;
if(mid*mid<=x)
low = mid;
else {
high = mid;
}
}
return (int) low;
}
C++
int sqrt(int x) {
unsigned long long begin =0;
unsigned long long end = (x+1)/2;
unsigned long long mid;
unsigned long long temp;
while(begin<end){
mid = begin+(end-begin)/2;
temp = mid*mid;
if(temp == x) return mid;
else if(temp<x) begin = mid+1;
else end = mid-1;
}
temp = end*end;
if(temp>x)
return end-1;
else
return end;
}
newton method
int sqrt(int x) {
if(x==0)
return 0;
double pre;
double cur =1;
do{
pre = cur;
cur = x/(2*pre)+ pre/2.0;
}while(abs(cur-pre)>0.0000001);
return int(cur);
}