Implement
int sqrt(int x).
Compute and return the square root of x.
Using the idea from Binary Search. Pay attention to some corner case.
public int sqrt(int x) {
if(x < 2)
return x;
int i = 1, j = x / 2;
while(i <= j) {
int mid = i + (j - i) / 2;
if(mid == x / mid)
return mid;
else if(mid < x / mid)
i = mid + 1;
else
j = mid - 1;
}
return j;
}
Another way is to use the Newton method.
public int sqrt(int x) {
if(x < 2)
return x;
double eps = 0.0000001;
double oldValue = x, newValue = 1;
while(Math.abs(oldValue - newValue) > eps) {
oldValue = newValue;
newValue = (newValue + x / newValue) / 2;
}
if((int)oldValue*(int)oldValue > x)
oldValue--;
return (int)oldValue;
}
没有评论:
发表评论