华为机试HJ107:求解立方根
程序员文章站
2024-03-22 23:31:46
...
作者:翟天保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;
}
上一篇: 白书5.3 二分搜索简易模板