用二元法解题需要注意,的是小于1部分的边界值。比如:0.008,他的立方根为0.2,,这里的最大值为0-1之间,这里很容易出错。
得区分输入的值是大于1还是小于1.
大于1:边界值在1到自身
小于1:边界值0-1 . 踩坑的路过。。。
while ((line = readline())) { let lines = line.split(/\s+/); let num = parseFloat(lines[0]); const main = function (num) { if (num < 0) { return -1 * main(-num); } if (num == 0 || num == 1) return num; let low = num > 1 ? 1 : 0; let high = num > 1 ? num : 1; /** 这里很容易出错,小于1的数 他的区间在0-1之间,而不是0-他本身之间 **/ // let low = 0; // let high = num; // 用上面注释的代码,测试用例只能过80% let mid = 0; while (high - low > 0.001) { mid = (high + low) / 2; if (mid * mid * mid == num) { return mid; } else if (mid * mid * mid > num) { high = mid; } else { low = mid; } } return high; }; let result = main(num); console.log(main(num).toFixed(1)); }