【leetcode】69. Sqrt(x) 整数开方计算最合适的小的数

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
    原文地址: https://segmentfault.com/a/1190000007383731
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞