二分法求開方,比較簡單,如果找到更加快速的方法就更好了。有如下幾種,迭代牛頓法、另外一種有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;
}