数的三次方根
这题是个实数二分。
记住一个模版,让你轻松秒实数二分。
while (r - l >= EPS)
{
double mid = (l + r) / 2;
if (check(mid) l = mid;
else r = mid;
}
注意:
1.要求保留 kk 位小数,EPS 就要取 1e−(k+2)1e−(k+2)。
2.ll 和 rr 直接等于 mid 即可,不用增加或减少
3.取 midmid 不能用 >> 了,因为是浮点数
展示代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
double n;
int main()
{
double l = -10000, r = 10000;
cin >> n;
while (r - l >= 1e-8)
{
double mid = (l + r) / 2;
if (mid * mid * mid <= n) l = mid;
else r = mid;
}
printf("%lf", l);
return 0;
}