题目描述
•计算一个数字的立方根,不使用库函数
详细描述:
输入:double 待求解参数
返回值:double 输入参数的立方根,保留一位小数
输入描述:
待求解参数 double类型
输出描述:
输入参数的立方根 也是double类型
示例1
输入
216
输出
6.0
code
利用牛顿迭代公式:
#include<iostream>
#include<cmath>
using namespace std;
static double subFuc(double guess,double input)
{
if(abs(guess*guess*guess-input)<10e-6)
return guess;
else{
double t;
t = ( 2*guess + input/(guess*guess) )/3.0;
return subFuc(t, input);
}
}
static double getCubeRoot(double input)
{
double guess = 1.0;
return subFuc(guess, input);
}
int main()
{
double input;
cin >> input;
double result = getCubeRoot(input);
printf("%.1f", result);
return 0;
}
利用二分法:
#include<iostream>
#include<cmath>
using namespace std;
static double subFuc(double start,double mid, double input)
{
if(mid*mid*mid-input>10e-6)
return subFuc(start, 0.5*(start+mid), input);
else if(mid*mid*mid-input<-10e-6)
return subFuc(mid, 0.5*(input+mid),input);
else
return mid;
}
static double getCubeRoot(double input)
{
return subFuc(0.0,0.5*input, input);
}
int main()
{
double input;
cin >> input;
double result = getCubeRoot(input);
printf("%.1f", result);
return 0;
}
考虑负数情况:
#include<iostream>
#include<cmath>
using namespace std;
static double subFuc(double start,double mid, double input)
{
if(mid*mid*mid-input>10e-6)
return subFuc(start, 0.5*(start+mid), input);
else if(mid*mid*mid-input<-10e-6)
return subFuc(mid, 0.5*(input+mid),input);
else
return mid;
}
static double getCubeRoot(double input)
{
return subFuc(0.0,0.5*input, input);
}
int main()
{
double input;
cin >> input;
double result;
if(input<0.0)
result = -getCubeRoot(abs(input));
else
{
result = getCubeRoot(input);
}
printf("%.1f", result);
return 0;
}