当前位置: 面试刷题>> x 的平方根(经典算法150题)


### 题目描述 给定一个非负整数`x`,编写一个函数来计算并返回`x`的平方根,结果保留到小数点后两位。要求不使用内置的平方根函数,如Python的`math.sqrt()`、JavaScript的`Math.sqrt()`或PHP的`sqrt()`等。 ### 示例 **输入**:`x = 4` **输出**:`2.00` **输入**:`x = 8` **输出**:`2.83`(注意:这里的结果保留两位小数,实际平方根为2.8284...) ### 解题思路 我们可以使用二分查找法来逼近平方根的值。由于平方根函数是单调递增的,我们可以设定一个搜索范围,初始时范围从0到x,然后不断缩小这个范围,直到找到满足条件的平方根值(或者足够接近的值)。 ### PHP代码示例 ```php function mySqrt($x) { if ($x == 0) return 0.00; $left = 0; $right = $x; $precision = 0.01; // 设定精度 while ($left + $precision < $right) { $mid = $left + ($right - $left) / 2; $square = $mid * $mid; if ($square == $x) { return round($mid, 2); } elseif ($square < $x) { $left = $mid; } else { $right = $mid; } } // 当循环结束时,left 和 right 足够接近,取 left 或 right 均可 return round($right, 2); } echo mySqrt(4); // 输出 2.00 echo mySqrt(8); // 输出 2.83 ``` ### Python代码示例 ```python def mySqrt(x): if x == 0: return 0.00 left, right = 0, x precision = 0.01 while left + precision < right: mid = (left + right) / 2 square = mid * mid if square == x: return round(mid, 2) elif square < x: left = mid else: right = mid return round(right, 2) print(mySqrt(4)) # 输出 2.00 print(mySqrt(8)) # 输出 2.83 ``` ### JavaScript代码示例 ```javascript function mySqrt(x) { if (x === 0) return 0.00; let left = 0; let right = x; const precision = 0.01; while (left + precision < right) { const mid = (left + right) / 2; const square = mid * mid; if (square === x) { return +mid.toFixed(2); } else if (square < x) { left = mid; } else { right = mid; } } return +right.toFixed(2); } console.log(mySqrt(4)); // 输出 2.00 console.log(mySqrt(8)); // 输出 2.83 ``` 以上代码示例均实现了不使用内置平方根函数来计算非负整数`x`的平方根,并保留两位小数。
推荐面试题