数的三次方根

Problem Link

Solution:

浮点数二分

注意:0.001的三次方根是0.1,因此,r不能取n,应取max(1,n),

其他处理方式:l=-MAXN,r=MAXN

Code 1:

#include <cstdio>
#include <algorithm>

using namespace std;

double n;

int main()
{
    scanf("%lf",&n);
    
    double m=abs(n);

    double l=0,r=max(1.0,m);

    while(r-l>1e-8)
    {
        double mid=(l+r)/2;
        if(mid*mid*mid>=m)r=mid;
        else l=mid;
    }

    if(n<0)l=-l;
    
    printf("%.6lf\n",l);
    return 0;
}

Code 2:

#include <cstdio>
#include <algorithm>

using namespace std;

const  double N=10000;

double n;

int main()
{
    scanf("%lf",&n);

    double l=-N,r=N;

    while(r-l>1e-8)
    {
        double mid=(l+r)/2;
        if(mid*mid*mid>=n)r=mid;
        else l=mid;
    }
    
    printf("%.6lf\n",l);
    return 0;
}
posted @ 2023-06-20 19:09  FighterQ  阅读(54)  评论(0)    收藏  举报