LintCode:Sqrt(x) x的平方根

来源:互联网 发布:trittec防霾窗纱 知乎 编辑:程序博客网 时间:2024/04/29 07:24

实现 int sqrt(int x) 函数,计算并返回 x 的平方根


样例

sqrt(3) = 1

sqrt(4) = 2

sqrt(5) = 2

sqrt(10) = 3


挑战 

O(log(x))


我的代码:注意平方值可能会超过int,故使用long long

class Solution {
public:
    /**
     * @param x: An integer
     * @return: The sqrt of x
     */
    int sqrt(int x) {
        // write your code here
           return search(0,x,x);
        }
    
    int search(int s, int n, int x)
    {
       long long t = (s + n)/2;
       long long tt = t*t;
       if(tt > (long long)x)
           return search(s, t, x);
       if(tt < x)
       {
           for(long long i=t; i<=n; i++)
           {
               long long ii = i * i;
               if(ii > (long long)x)
                 return (int)i-1;
               if(ii == (long long)x)
                 return (int)i;
           }
       }
       if(tt == (long long)x)
           return (int)t;
    }
};


更好的二分算法,参见:http://blog.csdn.net/wutingyehe/article/details/46648991

0 0
原创粉丝点击