leetcode-69. Sqrt(x)

2022-06-17 10:05:25 浏览数 (1)

JAVA解法

代码语言:javascript复制
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 中哪一个是真正的答案。

0 人点赞