【ACWing】790. 数的三次方根

题目地址:

https://www.acwing.com/problem/content/792/

给定一个浮点数 n n n,求其三次方根。保留 6 6 6位小数。

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

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

数据范围:
− 10000 ≤ n ≤ 10000 -10000\le n \le 10000 10000n10000

浮点数二分。代码如下:

#include 
using namespace std;

// 这里精度需要比保留的小数位数多2,题中是保留6位小数,所以此处是1e-8
const double eps = 1e-8;

int main() {
  double n;
  cin >> n;

  double l = -50, r = 50;
  while (l + eps < r) {
    double m = l + (r - l) / 2.0;
    if (m * m * m > n) r = m;
    else l = m;
  }

  printf("%.6lf", l);
}

时间复杂度 O ( log ⁡ r / ϵ ) O(\log r/\epsilon) O(logr/ϵ) r r r是搜索区间长度, ϵ \epsilon ϵ是允许的误差。

你可能感兴趣的:(AC,数组,字符串,链表与模拟,算法,c++)