题目描述:
计算一个数字的立方根,不使用库函数。
保留一位小数。
输入描述:
待求解参数,为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; }