求解X的平方根
一、实例要求
- 1、给定一个
非负整数 x
,计算并返回 x 的算术平方根
; - 2、由于返回类型是整数,结果
只保留整数部分 ,小数部分将被舍去
; - 3、不允许使用任何内置指数函数、运算符;
二、实例分析
- 1、初始化
左边界为0
,右边界为x的一半
; - 2、在左右边界之间进行
二分查找
; - 3、在每一步中,
取中间值mid,计算mid的平方
; - 4、如果 mid 的平方
小于
x,则将左边界设为 mid + 1
; - 5、如果 mid 的平方
大于
x,则将右边界设为 mid - 1
; - 6、当左边界大于右边界时,结束循环,此时
右边界就是 x 的算术平方根的整数部分
; - 7、定义二分查找的关键值时,需要
使用long long类型,防止mid*mid会溢出
;
三、示例代码
int mySqrt(int x) {
if (x == 0 || x == 1) return x; // 当 x 为 0 或 1 时,平方根即为 x 本身
int left = 0, right = x / 2;
int result;
while (left <= right) {
long long mid = left + (right - left) / 2; // 防止溢出
if (mid * mid == x) { // mid 的平方正好等于 x
return mid;
} else if (mid * mid < x) { // mid 的平方小于 x
left = mid + 1;
result = mid; // 更新结果
} else { // mid 的平方大于 x
right = mid - 1;
}
}
return result;
}
四、运行结果