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

本题的思路就是先判断这个数是大于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;

                    }

                }

扫描二维码关注公众号,回复: 15121220 查看本文章

                //因为是开三次方,根据百分位来四舍五入的,所以通过加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>

猜你喜欢

转载自blog.csdn.net/weixin_68067009/article/details/124458134