【每日算法】基础算法——浮点数二分查找[数的三次方根](六
题目内容
给定一个浮点数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。
代码实现
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;
}