华为机试HJ107:求解立方根

Posted 翟天保Steven

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为机试HJ107:求解立方根相关的知识,希望对你有一定的参考价值。

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

题目描述:

计算一个数字的立方根,不使用库函数。

保留一位小数。

输入描述:

待求解参数,为double类型(一个实数)

输出描述:

输入参数的立方根。保留一位小数。

示例:

输入:

216

输出:

6.0

解题思路:

这是道数学题,求解数值的立方根,就是求解fx=x^3-C的零根,C就是数值,x就是我们要解的立方根。有两种方法,一种方法就是暴力遍历,将x从某个初始值开始,每0.05进行一次立方计算,判断与C的差值是否大于0,若某个数值所得差值从负数变为正数,该数值近似为解;另一种方法就是牛顿迭代法,计算xn+1=xn+(C/xn^2-xn)/3,若某个xn+1的立方同C差值的绝对值小于某个精度,则认为找到该值,至于为什么用这个式子,可以百度牛顿迭代法,百度百科讲的很清楚。

测试代码:

#include <iostream>
#include <math.h>
#include <iomanip>

using namespace std;

double func(double t,double num)
{
    if(abs(t*t*t-num)<0.00001)
        return t;
    else
        return func((num/t/t+2*t)/3,num);
}

int main()
{
    double num;
    while(cin>>num)
    {
        cout<<fixed<<setprecision(1)<<func(1.,num)<<endl;
    }
    return 0;
}

以上是关于华为机试HJ107:求解立方根的主要内容,如果未能解决你的问题,请参考以下文章

华为机试-求解立方根

华为机试HJ76:尼科彻斯定理

华为机试刷题笔记HJ39-判断两个IP是否属于同一子网

华为机试-HJ68 成绩排序

华为机试HJ19:简单错误记录

华为机试HJ43:迷宫问题