一、题目描述
计算一个浮点数的立方根,不使用库函数。保留一位小数。
数据范围:∣val∣≤20 。
二、输入描述
待求解参数,为double类型(一个实数)
三、输出描述
输出参数的立方根。保留一位小数。
四、解题思路
- 从输入中读取一个浮点数;
- 初始化低位low为0,高位high为输入的值;
- 判断输入的值的正负情况,如果小于0,将标志flag设为1,并将输入取绝对值;如果输入小于1,则将高位设为1;
- 进入循环,使用二分查找逼近立方根;
- 在每次循环中,计算中间值target为low和high的平均值;
- 计算d为输入值除以target的平方减去target的差;
- 判断d是否在接近0的范围内(-0.1到0.1之间),如果是,则找到了近似的立方根;
- 根据标志flag判断输出的结果是否带负号,使用String.format保留一位小数并输出结果;
- 继续循环直到输入结束;
五、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 实现【相对开音节】【2022Q4 100分】,附详细解题思路
🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。