题解 | #求解立方根#

求解立方根

https://www.nowcoder.com/practice/caf35ae421194a1090c22fe223357dca

#include <iostream>
#include <cmath>
using namespace std;
int main() {
    double val;
    while (cin >> val) { // 注意 while 处理多个 case
        int flag = 1;
        if (val < 0) {
            flag = -1;
            val = -val;
        } 
        double left = 0.0;
        // VAL 小于 1 的时候,val的立方根 大于val ,同时小于1 
        double right = max(1.0,val) ;
        while( fabs(left - right) > 1e-5) {
            double mid = (left + right) / 2.0;
            double mid3 = mid * mid * mid ;
            if ( fabs(mid3  - val ) == 1e-5) {
                std::cout << flag*mid << std::endl;
                break;
            } else if (mid3 - val > 1e-5) {
                right = mid;
            } else {
                left = mid;
            }
        }
        printf("%.1f",flag*left);
        return 0;

    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务