AcWing 790. 数的三次方根

AcWing 790. 数的三次方根 - 糖豆爸爸 - 博客园
第一讲 基础算法 - 03二分 | Akari的小站

AcWing 790. 数的三次方根【简单】

一、题目描述

给定一个浮点数 n,求它的三次方根。

输入格式
共一行,包含一个浮点数 n。

输出格式
共一行,包含一个浮点数,表示问题的解。

注意,结果保留 6 位小数。

数据范围
−10000 ≤ n ≤ 10000

输入样例:

1000.00

输出样例:

10.000000

二、分析

浮点数二分还是很简单的,最开始使劲设置最大和最小,精度一般设为 1e-8,然后根据条件写 check(),发现符合就向左或向右逼近,直到结果的差,精度在可以接受的范围内。
以本题来说,给出的数据相当于 y,而我们输出的相当于 x,即:y = x*x*x
因为 −10000 ≤ n ≤ 10000,开三次方根不会超过 100,所以 l、r 设置为 -100, 100即可。
保留 6 位小数,所以 eps = 1e-8

实际上,21*21*21 < 10000 < 22*22*22,最小开到 22 即可。

三、AC代码

/**
* @version:
* @author: @Akari
* @date: 2024-01-26 22:35:11
**/
#include <bits/stdc++.h>
#define int long long
using namespace std;

const double eps = 1e-8;
double bsearch(double l, double r, double x);

signed main(void)
{
double x;
scanf("%lf", &x);
printf("%.6lf\n", bsearch(-100, 100, x));

return 0;
}

double bsearch(double l, double r, double x){
while (r - l > eps){
double mid = (l + r) / 2;
if (mid*mid*mid <= x) l = mid;
else r = mid;
}
return l;
}

四、牛顿迭代法

hhh,大佬太强了······

大佬题解:https://www.cnblogs.com/littlehb/p/15234625.html