【ATT】【second】Sqrt(x)

二分查找。要注意越界问题。以及除数是否为0的情况

    int sqrt(int x) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        if(x<=1)
            return x;
        int left = 1,right = x;
        while(left<=right)
        {
            int mid = left + (right-left)/2;
            int tmp = x/mid;  //用除法,因为mid*mid可能越界;用除法的话,考虑分母是否为0,因此x从2开始计算,那么mid不可能为0
            if(tmp<mid)
                right = mid-1;
            else if(tmp>mid)
                left = mid+1;
            else
                return mid;
        }
        return right; //返回的是right
    }

  

 

posted @ 2013-10-18 21:47  summer_zhou  阅读(158)  评论(0编辑  收藏  举报