Implement int sqrt(int x)
.
Compute and return the square root of x.
分析:二分法和牛顿迭代法
牛顿迭代方程:x2 = x1 / 2 + x / x1
class Solution {
public:
int sqrt(int x) {
if (x ==0)
return 0;
double x1 = 0;
double x2 = 1;
while (abs(x2 - x1) > 0.001)
{
x1 = x2;
x2 = x / (2 * x1) + x1 / 2.0;
}
return int(x2);
}
};
class Solution {
public:
int sqrt(int x) {
unsigned long long begin = 0;
unsigned long long end = x;
unsigned long long mid;
unsigned long long tmp;
while (begin < end) {
mid = begin + (end - begin) / 2;
tmp = mid * mid;
if(tmp == x)return mid;
else if(tmp < x) begin = mid + 1;
else end = mid - 1;
}
tmp = end * end;
if(tmp > x) {
return end - 1;
} else {
return end;
}
}
};