求解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 的平方正好等于 xreturn mid;} else if (mid * mid < x) { // mid 的平方小于 xleft = mid + 1;result = mid; // 更新结果} else { // mid 的平方大于 xright = mid - 1;}}return result;
}
四、运行结果

 