LeetCode OJ - Sqrt(x)

Implement int sqrt(int x).

Compute and return the square root of x.

分析:二分法和牛頓迭代法

牛頓迭代方程:x2 = x1 / 2 + x / x1


class Solution {
public:
    int sqrt(int x) {
        if (x ==0)
            return 0;
        double x1 = 0;
        double x2 = 1;
        while (abs(x2 - x1) > 0.001)
        {
            x1 = x2;
            x2 = x / (2 * x1) + x1 / 2.0;
        }
        return int(x2);
    }
};


二分法:

class Solution {
public:
int sqrt(int x) {
        unsigned long long begin = 0;
        unsigned long long end = x;
        unsigned long long mid;
        unsigned long long tmp;
        while (begin < end) {
            mid = begin + (end - begin) / 2;
            tmp = mid * mid;
            if(tmp == x)return mid;
            else if(tmp < x) begin = mid + 1;
            else end = mid - 1;
        }
        tmp = end * end;
        if(tmp > x) {
            return end - 1;
        } else {
            return end;
        }
    }
};



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章