class Solution {
public int mySqrt(int x) {
// x 为0,无法开根号
if (x == 0) {
return 0;
}
// 根号 x 等于 e 的 1/2*log(x) 次方
int ans = (int) Math.exp(0.5 * Math.log(x));
/**
由于计算机无法存储浮点数的精确值,
而指数函数和对数函数的参数和返回值均为浮点数,
因此运算过程中会存在误差。
因此在得到结果的整数部分 ans 后,
我们应当找出 ans 与 ans+1 中哪一个是真正的答案。
*/
return (long) (ans + 1) * (ans + 1) <= x ? ans + 1 : ans;
}
}
leetcode原题: 69. Sqrt(x)
首先要判断传进来的值是否为 0,0 是无法开根号的。之后对开根号转换成根号 x 等于 e 的 1/2*log(x) 次方的形式,并强制转换为 int 类型,即可得到答案。
但是在放回的时候由于计算机无法存储浮点数的精确值,而指数函数和对数函数的参数和返回值均为浮点数,因此运算过程中会存在误差。因此在得到结果的整数部分 ans 后,我们应当找出 ans 与 ans+1 中哪一个是真正的答案。