Sqrt(x)

来源:互联网 发布:红包源码 编辑:程序博客网 时间:2024/06/02 10:43

转自:http://blog.csdn.net/linhuanmars/article/details/20089131


class Solution {public:    int sqrt(int x) {          if(x < 0) {            return -1;        }        if(x == 0) {            return 0;        }        int low = 1, high = x / 2 + 1;        while(low <= high) {            int mid = (low + high) / 2;            if(mid <= x / mid && (mid + 1) > x / (mid + 1)) {                return mid;            }            if(mid < x / mid) {                low = mid + 1;            } else {                high = mid - 1;            }        }        return 0;    }};


牛顿迭代法:


const double epsilon = 1e-5;class Solution {public:    int sqrt(int x) {          if(x < 0) {            return -1;        }        if(x == 0) {            return 0;        }        double last = 0;        double result = 1;        while(abs(result - last) > epsilon) {            last = result;            result = (result + x / result) / 2.0;        }        return result;    }};


0 0