实现 int sqrt(int x)
函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4 输出: 2
示例 2:
输入: 8 输出: 2 说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
自己用二分法写的时候,没考虑全跳出条件,陷入死循环。
代码参考来源https://blog.youkuaiyun.com/lyy_hit/article/details/49785677
由于有可能待求的平方根是介于两个整数之间的,这种情况需要判断处理。即如果中间值与左右边界的和的一半是相等的,那么现在的中间值就是上一循环中已经使用过的,也就是不需要再进行迭代计算了。同时此时的中间值,也是最接近平方根的整数值。
class Solution {
public:
int mySqrt(int x) {
if(x==0||x==1)
return x;
int left=0,right=46341; //右边界不以x为准,太大了会溢出
int mid;
int y;
while(left<=right){
if (mid == (left + right) / 2)
break;
mid=(left+right)/2;
y=mid*mid;
if(y==x)
return mid;
else if(y<x)
left=mid;
else
right=mid;
}
return mid;
}
};