vlambda博客
学习文章列表

【每日算法】基础算法——浮点数二分查找[数的三次方根](六

题目内容

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


输入格式

共一行,包含一个浮点数n。


输出格式

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

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


数据范围

−10000≤n≤10000


输入样例

1000.00


输出样例

10.000000


题解

首先,浮点数的二分和整数二分很类似,核心也是针对区间的判断以及求分界点。

思考如下:

1、定义mid = (l+r)/2,区间范围是[l,r]。

2、思考mid^3和x的大小关系,若mid^3大,则说明x^(1/3)的值在左边,即区间更新应该是[l,mid];若mid^3小,则说明x^(1/3)的值在右边,即区间更新应该是[mid,r]。

3、重复以上步骤,直到求出答案


这里需要注意的是,偶次方根和奇次方根在数值范围上是存在差异的,有时需要对[0,1]和[1,正无穷]进行区分。比如0.1的平方数值是0.01,小于0.1,而1.1的平方数值是1.21,大于1.1。


代码实现

#include <iostream>
using namespace std;
int main(){ double x; cin >> x; double l = -10000, r = 10000; while (r - l > 1e-8){ double mid = (l + r) / 2; if (mid * mid *mid >= x) r= mid; else l = mid; } printf("%lf\n", l); return 0;}