给定一个浮点数n,求它的三次方根。
输入格式
共一行,包含一个浮点数n。
输出格式
共一行,包含一个浮点数,表示问题的解。
注意,结果保留6位小数。
数据范围
−10000 ≤ n ≤ 10000
输入样例:
1000.00
输出样例:
10.000000
这道题明显的二分裸题,没什么好说的。
但是有一个点,我一直容易犯错。
就拿这个题来说: 对一个数 num 我起初的想法是 设定二分查找的区间是 [-num , num] 这是有问题。
问题在于当num = 0.0001 的时候,它的三次方根是0.1 是不在[-num , num] 之间的,因此这样选择是有问题的
最好就是设定题目中num的取值范围作为二分查找的初始区间。
#include<iostream>
#include<cmath>
using namespace std;
int main(){
double num;
cin>>num;
double l = -10000,r = 10000, mid;
while(fabs(l - r) >= 1e-7){
mid = (l + r) / 2.0;
if (mid * mid * mid <= num) l = mid;
else r = mid;
}
printf("%.6f",r);
return 0;
}