华为OD机试真题 JavaScript 实现【求解立方根】【牛客练习题】

在这里插入图片描述

一、题目描述

计算一个浮点数的立方根,不使用库函数。保留一位小数。

数据范围:∣val∣≤20 。

二、输入描述

待求解参数,为double类型(一个实数)

三、输出描述

输出参数的立方根。保留一位小数。

四、解题思路

  1. 从输入中读取一个浮点数;
  2. 初始化低位low为0,高位high为输入的值;
  3. 判断输入的值的正负情况,如果小于0,将标志flag设为1,并将输入取绝对值;如果输入小于1,则将高位设为1;
  4. 进入循环,使用二分查找逼近立方根;
  5. 在每次循环中,计算中间值target为low和high的平均值;
  6. 计算d为输入值除以target的平方减去target的差;
  7. 判断d是否在接近0的范围内(-0.1到0.1之间),如果是,则找到了近似的立方根;
  8. 根据标志flag判断输出的结果是否带负号,使用String.format保留一位小数并输出结果;
  9. 继续循环直到输入结束;

五、JavaScript算法源码

function cubeRoot(val) {
    // 初始化低位low为0
    let low = 0;
    // 高位high为输入的值
    let high = val;
    let flag = 0;

    // 如果小于0,将标志flag设为1,并将输入取绝对值
    if (val < 0) {
        flag = 1;
        val = -val;
        if (val < 1.0) {
            high = 1;
        } else {
            high = val;
        }
        // 如果输入小于1,则将高位设为1
    } else if (val < 1) {
        high = 1;
    }

    while (true) {
        let target = low + (high - low) / 2;
        let d = val / (target * target) - target;
        // 近似的立方根
        if (d >= -0.1 && d <= 0.1) {
            return flag ? -parseFloat(target.toFixed(1)) : parseFloat(target.toFixed(1));
        } else if (d > 0.1) {
            low = target;
        } else {
            high = target;
        }
    }
}

六、效果展示

华为OD机试真题 JavaScript 实现【求解立方根】【牛客练习题】_第1张图片


下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路

本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)

每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

你可能感兴趣的:(javascript,算法,开发语言,学习,华为)