题目
描述
计算一个数字的立方根,不使用库函数
详细描述:
接口说明
原型:
public static double getCubeRoot(double input)
输入:double 待求解参数
返回值:double 输入参数的立方根
输入
待求解参数 double类型
输出
输入参数的立方根 也是double类型
样例输入
216
样例输出
6.0
思路1
Xn+1=Xn+13(AX2n−Xn)
代码1
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
double fun(double guess,double x)
{
if(abs(guess*guess*guess-x)<0.0001)
{
return guess;
}
else
{
return fun((x/guess/guess+2*guess)/3,x);
}
}
int main()
{
double input;
//while(cin>>input)
cin>>input;
cout<< fixed << showpoint << setprecision(1) << fun(0.1,input)<<endl;
return 0;
}
思路2
f(x)=x3
f′(x)=3x2
利用
y=f(x)+f′(x)(x−x0)
代码2
#include <iostream>
#include<iomanip>
#define E 0.0001 //精度设置
using namespace std;
double getCubeRoot(double num)
{
double x0=num;
double result;
while (1)
{
result=x0-(x0*x0*x0-num)/(3*x0*x0);
if (result*result*result-num<E &&result*result*result-num>-E)
{
return result;
}
else
{
x0=result;
}
}
}
int main()
{
int number;
cin>>number;
cout<< fixed << showpoint << setprecision(1)<<getCubeRoot(number)<<endl;
}