本题的思路就是先判断这个数是大于0,还是小于0.我们知道f(x)=x^3在R上是单调增的,所以函数值越小,变量就越小。因此分类讨论
<script>
function cubeRoot(n) {
//判断这个数字是正整数还是负数,由于规定了要保留一位小数,所以每次自增自减的时候会以0.1的形式进行增减
if (n >= 0) {
for (var i = 0; ; i += 0.1) {
//这就类似于高中函数零点的知识f(x1)<0 f(x2)>0 则(x1,x2)上必有零点(函数连续)
if (i ** 3 <= n && (i + 0.1) ** 3 >= n) {
break;
}
}
//因为是开三次方,根据百分位来四舍五入的,所以通过加0.05后的值的三次方比n还小的话,说明i+1的三次方更接近n所以返回i+1,保留一位小数
if ((i + 0.05) ** 3 <= n) {
return (i + 0.1).toFixed(1)
}
return i.toFixed(1)
}
if (n < 0) {
for (var i = 0; ; i -= 0.1) {
//x^3在(-无穷,0)上是单调增的,所以,越减就越小。一开始是大于n,减完之后再三次方就小于n了
if (i ** 3 >= n && (i - 0.1) ** 3 <= n) {
break;
}
}
//同理,如果加了0.05后三次方小于了n,那就说明i+1更接近n的立方根
if ((i + 0.05) ** 3 <= n) {
return (i + 0.1).toFixed(1)
}
return i.toFixed(1)
}
}
</script>