0
点赞
收藏
分享

微信扫一扫

【二分】Acwing790 数的三次方根

罗蓁蓁 2022-01-31 阅读 41

原题链接
二分模板总结

题目描述

给定一个浮点数n,求它的三次方根,结果保留六位小数
数据范围:
−10000≤n≤10000

题目分析

道理上来说,可以从小到大枚举😂😂。但是这些数都是从小到大有序地排好队的,我们就可以用二分了。区别于整数二分,这个是浮点数二分

#include<iostream>

using namespace std;

double n;

int main()
{
    cin>>n;
    double l=-10000, r=10000;
    
    //保留六位的话,取-8, 保留4位的话,取-6
    while(r-l>1e-8)
    {
        double mid=(l+r)/2;
        // 寻找满足x^3>=n最小的数,也就是尽可能往左。
 			 // 所以用第一个模板
        if(mid*mid*mid>=n) r=mid;
        // 按理来说,这里应该是l=mid+1的。
        // 但是,因为这儿是浮点数,所以不能+1,-1了,
        // 不然很容易造成误差,要加或减去一个很小的数才行。
        // 比如加上1e-8,或者不加,都是对的。
        else l=mid;
        // else l=mid+1e-8;
    }
    
    printf("%.6lf\n", l);
}
举报

相关推荐

0 条评论