题目
给定一个浮点数 ,求它的三次方根。
输入格式
共一行,包含一个浮点数 。
输出格式
共一行,包含一个浮点数,表示问题的解。
注意,结果保留 位小数。
数据范围
输入样例:
1000.00
输出样例:
10.000000
解题
方法一:浮点数二分
思路
浮点数二分模板题。
注意:
- 输入负数时要特殊处理。
- 输入的 之所以要和 取个 是因为当 时其三次方根可能大于它自身。
- 精度一般取题目要求的精度小两个数量级。
代码
import java.util.*;
import java.io.*;
public class Main {
static final double eps = 1e-8;
static double root(double n, int m, double eps) {
double l = 0.0, r = Math.max(n, 1.0);
while (r - l > eps) {
double c = (l + r) / 2;
double prod = 1.0;
for (int i = 0; i < m; ++i) prod *= c;
if (prod >= n) r = c;
else l = c;
}
return l;
}
public static void main(String[] args) throws IOException {
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
in.nextToken();
double n = in.nval;
boolean isNeg = n < 0;
double ans = isNeg ? -root(-n, 3, eps) : root(n, 3, eps);
System.out.printf("%.6f\n", ans);
}
}
评论区