69. Sqrt(x)

来源:互联网 发布:网络商标查询 编辑:程序博客网 时间:2024/06/08 07:01

Implement int sqrt(int x).

Compute and return the square root of x.

题意:求一个数的平方根。二分查找

class Solution {public:    int mySqrt(int x) {        int l, r;        long long mid;        l = 0, r = x;        while(l <= r){            mid = l + (r - l) / 2;            if(mid * mid == x){                return mid;            } else if(mid * mid < x){                l = mid + 1;            } else if(mid * mid > x){                r = mid - 1;            }        }        return r;    }};

思路二:牛顿法(好牛逼的样子而且速度比上面方法快)
《算法设计与分析基础》11.4中根据方程Xn+1 = 1/2(Xn + D/Xn), n = 0,1,…计算根号D, X0 = (1 + D)/2;
书中一个小例子:计算根号2,在第6位小数的地方对数字四舍五入
X0 = (1 + 2)/2 = 1.500000
X1 = (X0 + 2/X0)/2 = 1.416667
X2 = (X1 + 2/X1)/2 = 1.414216
X3 = (X2 + 2/X2)/2 = 1.414214
X4 = (X3 + 2/X3)/2 = 1.414214
这时候可以停下来,因为x4 = x3 = 1.414214

class Solution {public:    int mySqrt(int x) {        double D = (double)x;        double xi = (1 + D) / 2;        double delta = D - xi;        while(delta > 0.1){            double z = (xi + D / xi) / 2;            delta = xi - z;            xi = z;        }        return (int)xi;    }};
原创粉丝点击