注意数字 a 如果在[0, 1],那么它的立方根是比它大的,右边界取到 a 是不够的,负数同理。
#include <bits/stdc++.h>
using namespace std;
void solve(double &a)
{
double lo = a < 0 ? min(a, -1.0) : 0.0;
double hi = a > 0 ? max(a, 1.0) : 0.0;
for (int i = 0; i < 1000; i++) {
double mid = (double)(lo + hi) / 2;
if (mid * mid * mid < a) lo = mid;
else hi = mid;
}
cout << setiosflags(ios::fixed) << setprecision(1) << lo << endl;
}
int main()
{
double a;
for (; cin >> a;)
solve(a);
return 0;
} 
京公网安备 11010502036488号