此题为求整型变量的平方根
解题的基本思路为二分法,给定 x ,在0 x之间找一个数y,若y平方小于x,(y+1)平方大于x,则y为要找的值。
需要注意的是一些边界的处理,1)0 和 1 比较特殊直接判断输出结果
2)yy会溢出,则比较时不能直接用yy<x,采用除法计算,再和1进行比较。
3)若采用(start+mid)/2计算mid,在计算start+mid时会溢出,采用int mid=start/2.0+end/2.0,double转为int是向下取整,其结果和(start+mid)/2一致。
代码如下:
class Solution {
public:
int mySqrt(int x) {
int result;
if(x==0)
return 0;
else if(x==1)
return 1;
else
{
int start=0;
int end=x;
while(1)
{
int mid=start/2.0+end/2.0;
double devide=x/(1.0*mid);
devide=devide/(1.0*mid);
if(devide>=1)
start=mid;
else
end=mid;
if(start+1==end)
{
result=start;
break;
}
}
return result;
}
}
};