题解 | #求解立方根#
求解立方根
https://www.nowcoder.com/practice/caf35ae421194a1090c22fe223357dca
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String a;
try {
a = in.readLine();
in.close();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
double n = parse(a);
boolean boln = n < 0 ? true : false;
if (boln)
n = -n;
n = func1(n);
System.out.print(boln ? -n : n);
}
static double parse(String a) {
double n1 = 0, n2 = 0, dec = 1;
int i = 0, l = a.length();
boolean bool = false, negative = false;
char[] chrAy = new char[l];
a.getChars(0, l, chrAy, 0);
if (chrAy[0] == '-') {
negative = true;
i = 1;
}
while (i < l) {
if (chrAy[i] == '.')
bool = true;
else {
if ((chrAy[i] - '0' | '9' - chrAy[i]) > 0) {
if (bool) {
dec *= 0.1;
n2 *= 10;
n2 += chrAy[i] - '0';
} else {
n1 *= 10;
n1 += chrAy[i] - '0';
}
}
}
i++;
}
n1 += n2 * dec;
return negative ? -n1 : n1;
}
static double func1(double n) {
double left = 0, right = n < 1 ? 1 : n, mid = 0, t = 0, div = 0;
while (left < right) {
mid = (left + right) / 2;
t = mid * mid * mid;
if (t < n) {
left = mid;
div = n - t;
} else {
right = mid;
div = t - n;
}
if (div < 0.01)
break;
}
mid *= 10;
mid += 0.5;
return (int) mid / 10d;
}
}
查看12道真题和解析