二分法:
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
// Write your code here
while ((line = await readline())) {
if (line == "0.0" || line == "-1.0" || line == "1.0") {
console.log(line);
return;
}
let num = parseFloat(line);
let fu = false; // 负数标志位
if (num < 0) {
num = -num;
fu = true;
}
// 二分法
// 注意事项,不要想当然地取1/3 或 1/2,因为存在一些特殊值,比如:0.6、2.7、5,所以真正的右边取值应该是 Math.max(1.0,num);
let xiao = 0.1,
da = Math.max(1.0,num);
let zhongjian = parseFloat(((xiao + da) / 2).toFixed(5)); // 精度要够,多取几位
let jingdu = 0.0001;
while (Math.abs(zhongjian ** 3 - num) > jingdu) {
if (zhongjian ** 3 > num) { //
da = zhongjian;
} else if (zhongjian ** 3 < num) {
xiao = zhongjian;
}
zhongjian = parseFloat(((xiao + da) / 2).toFixed(5)); // 精度要够,多取几位
}
if(fu){
zhongjian = -zhongjian // 别忘了负数,还原负数
}
zhongjian = zhongjian.toFixed(1);
console.log(zhongjian);
}
})();

京公网安备 11010502036488号