转自:http://blog.youkuaiyun.com/linhuanmars/article/details/20089131
class Solution {
public:
int sqrt(int x) {
if(x < 0) {
return -1;
}
if(x == 0) {
return 0;
}
int low = 1, high = x / 2 + 1;
while(low <= high) {
int mid = (low + high) / 2;
if(mid <= x / mid && (mid + 1) > x / (mid + 1)) {
return mid;
}
if(mid < x / mid) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return 0;
}
};
牛顿迭代法:
const double epsilon = 1e-5;
class Solution {
public:
int sqrt(int x) {
if(x < 0) {
return -1;
}
if(x == 0) {
return 0;
}
double last = 0;
double result = 1;
while(abs(result - last) > epsilon) {
last = result;
result = (result + x / result) / 2.0;
}
return result;
}
};