1. 题目
Implement int sqrt(int x).
Compute and return the square root of x.
注:对于5,6,7,8等都返回2.
2. 思路
用牛顿开方法计算。
原理: http://www.guokr.com/question…
3. 代码
class Solution {
public:
// 牛顿迭代法 X[n+1] = 1/2 * (X[n] + a/X[n]), a is x^2
// 单纯的整数开方数直接二分迭代
int mySqrt(int x) {
if (x == 0) return 0;
int y = x/2;
while (true) {
y = max(y, 1);
long long k1 = 1L * y * y;
long long k2 = 1L * (y+1)*(y+1);
if (k1 <= x && k2 > x) { return y; }
y = (y + x / y) / 2;
}
return y;
}
};