LeetCode 69. Sqrt(x)

来源:互联网 发布:cacti添加linux主机 编辑:程序博客网 时间:2024/06/08 17:59

二分法求开方,比较简单,如果找到更加快速的方法就更好了。有如下几种,迭代牛顿法、另外一种有cramack提出的办法。

这里只列出我的二分法,其他方法我专门找一次总结。

  int fun(int c,int x)    {         if(x/c==c)return 0;         return (x/c)>c?-1:1;    }    int mySqrt(int x) {        long long temp = x;        //if(temp>INT_MAX)x = INT_MAX;        //cout<<x<<endl;        double res;        int left,right,mid=0;        left = 1,right=x;        int l,r,m;        if(x==1)return 1;        else if(x==0)return 0;        while(left<=right){            //cout<<left<<" "<<right<<endl;            mid=(left+right)/2;            m = fun(mid,x);            if(m==0)return mid;            else if(m<0)left=mid+1;            else if(m>0)right=mid-1;        }            //cout<<r<<l<<endl;        return right;    }


0 0