华为机试 HJ107 题解 | #求解立方根#
求解立方根
https://www.nowcoder.com/practice/caf35ae421194a1090c22fe223357dca
#include <iostream>
#include <cmath>
#include <iomanip>
// #include <bits/stdc++.h>
using namespace std;
// 获取一个实数的立方根
double GetSqrt3(double a) {
double eps = 0.00001;
double res = a;
double left = 0.0;
double right = a;
if (abs(a - 1.0) <= eps) {
return 1.0;
} else if (a > 1.0) {
// res 结果在 [1.0,a)之间
double left = 1.0;
double right = a;
while (left < right) {
double mid = (left + right) / 2;
double y = mid * mid * mid;
if (abs(y - a) <= eps) {
res = mid;
break;
} else if (y > a) {
right = mid;
} else if (y < a) {
left = mid;
}
}
} else if (a < 1.0) {
// res 结果在(a, 1.0)之间
double left = a;
double right = 1.0;
while (left < right) {
double mid = (left + right) / 2;
double y = mid * mid * mid;
if (abs(y - a) <= eps) {
res = mid;
break;
} else if (y > a) {
right = mid;
} else if (y < a) {
left = mid;
}
}
}
return res;
}
int main() {
double dVal;
while (cin >> dVal) { // 注意 while 处理多个 case
int flag = dVal > 0 ? 1 : -1;
double dVal2 = abs(dVal);
double result = GetSqrt3(dVal2);
result = result * flag;
cout << setprecision(1) << fixed << result << endl;
}
return 0;
}


正浩创新EcoFlow公司福利 647人发布