注意数字 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; }