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;
    }
};

knzeus
72 声望28 粉丝

行万里路,读万卷书