[LeetCode] Sqrt(x) 二分搜索

Implement int sqrt(int x).

Compute and return the square root of x.

 

Hide Tags
 Math Binary Search
 
 

    并未使用牛顿迭代,实现是通过二分搜索实现的,需要注意判断时候 x* x<K 容易溢出,所以可以改为  x< k/x。
 
#include <iostream>
using namespace std;

class Solution {
public:
    int sqrt(int x) {
        if(x <2)    return x;
        int lft =1 ,rgt = x;
        int mid = (lft+rgt)/2;
        while(lft+1<rgt){
            if(mid == x/mid)    return mid;
            if(mid < x/ mid){
                lft = mid;
            }
            else{
                rgt = mid;
            }
            mid = (lft+rgt)/2;
        }
        if( rgt<=mid/rgt)   return rgt;
        return lft;
    }
};

int main()
{
    Solution sol;
    for(int i =1;i<50;i++)
        cout<<sol.sqrt(i)<<endl;
    return 0;
}

 

posted @ 2015-03-24 18:01  A_zhu  阅读(191)  评论(0编辑  收藏  举报