[AcWing]790. 数的三次方根(C++实现)模板题
1. 题目
2. 读题(需要重点注意的东西)
思路:浮点数的二分查找
3. 解法
---------------------------------------------------解法---------------------------------------------------:
#include<iostream>
using namespace std;
int main(){
double n;
scanf("%lf",&n);
double l = -10000,r = 10000;
while(r - l > 1e-8){
double mid =(l + r) / 2;
if(mid*mid*mid > n) r = mid;
else l = mid;
}
printf("%lf",l);
return 0;
}
4. 可能有帮助的前置习题
5. 所用到的数据结构与算法思想
- 浮点数的二分
6. 总结
1. 浮点数的二分,推荐完全背下来
2. 浮点数二分模板
while(check(x)){
double m=(l+r)/2;
if(m*m*m>=n) r=m;
else l=m;
}
3. 一般要求精度为小数点后6位的话,r-l就要大于1e-8;如果要保留小数点后8位的话,r-l就要大于1e-10;
即要保留多少位,就在判断语句里取大于它的两位的精度就可以。
4. %f代表单精度浮点型数据(float),有效位数为7位;
%lf代表双精度浮点型数据(double),有效位数为16位。
5. cout << l << endl 输出1.234567默认会默认输出6位有效数字1.23457(四舍五入6变为了7),
输出10.0000会默认输出10;要使用cout输入的话,需要作其他处理,这里不再赘述。