题解 | #求解立方根# 浮点数二分法
求解立方根
http://www.nowcoder.com/practice/caf35ae421194a1090c22fe223357dca
注意数字 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;
}  查看24道真题和解析
查看24道真题和解析