题目表述
给定一个浮点数 n,求它的三次方根。
输入格式
共一行,包含一个浮点数 n。
输出格式
共一行,包含一个浮点数,表示问题的解。
注意,结果保留 6 位小数。
数据范围
-1000<=n<=1000
输入样例:
1000.00
输出样例:
10.000000
题目分析:
解法一:利用数学函数方法:
利用c++内置函数直接求出结果
#include<iostream>
#include<cmath>
using namespace std;
int main() {
double a;
scanf("%lf", &a);
printf("%.6lf", cbrt(a));
return 0;
}
解法二:利用二分方法
#include<iostream>
using namespace std;
double n;
int main() {
cin >> n;
double l = -1e4, r = 1e4;
while (r - l > 1e-8) {
double mid = (l + r) / 2;
if (mid * mid * mid >= n) r = mid;
else l = mid;
}
printf("%lf", l);
return 0;
}
解法三:利用一般牛顿迭代法
按照解方程思想,给定一个浮点数n,求它的三次方根。
相当于求方程 f(x) = x^3 - n = 0 的解
#include <iostream>
#include <cmath>
using namespace std;
const double delta = 1e-8;
double f(double x, double n)
{
x = x - (x * x * x - n) / (3 * x * x); //x为初值
if (fabs(n - x * x * x) < delta)
return x;
return f(x, n);
}int main()
{
double n;
scanf("%lf", &n);
printf("%.6lf\n", f(n, n));
return 0;
}