Implementint sqrt(int x).
Compute and return the square root of x.
代码如下:
方法一:二分法(把mid定义成int 类型,判断条件不能用mid*mid,会溢出)
注意:返回的时high
int sqrt(int x) {
if(x < 0) return-1;
if(x==0) return 0;
int low=1,high=x/2+1;
while(low<=high)
{
int mid=(high-low)/2+low;
if(x/mid>mid) low=mid+1;//这里因为mid是int类型的,所以不能用mid*mid来判断,会溢出;这句话表示mid有点小,需要大一点;
else if(x/mid<mid)high=mid-1;
else return mid;
}
return high;//其实这一步就说明没有找到精确到结果,所以返回较小的high值近似一下
}
代码2:二分法(把mid定义成long long ,这里就可以使用mid*mid )
注意:返回的时high
int sqrt(int x) {
if(x < 0) return-1;
if(x==0) return 0;
long long low=1,high=x/2+1;
while(low<=high)
{
long long mid=((high-low)>>1)+low;
if(x>mid*mid) low=mid+1;//表示mid有点小,需要大一点;不能用mid*mid来判断,会溢出
else if(x<mid*mid)high=mid-1;
else return mid;
}
return high;//其实这一步就说明没有找到精确到结果,所以返回较小的high值近似一下
}
代码三:牛顿逼近法
int sqrt(int x) {
if (x == 0) return 0;
double last = 0;
double res = 1;
while (res != last)
{
last = res;
res = (res + x / res) / 2;
}
return int(res);
}