- 问题描述
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
- 解决方案
注意整型值相乘溢出的问题,用除来判断。比如mid > x / mid,代码如下:
public int mySqrt(int x) {
if(x == 0)
return 0;
int low = 1;
int high = x;
while(low + 1 < high){
int mid = low + ((high - low) >> 1);
if(mid > x / mid)
high = mid - 1;
else
low = mid;
}
if(high <= x / high)
return high;
else
return low;
}