基本思路
与上一篇整数二分的思路基本相同,但浮点二分通常是函数求根、开方等问题,比较简单。
题目描述
给定一个浮点数 n,求它的三次方根。
输入格式
输入共一行。
第一行,包含第一个浮点数n。
输出格式
共一行,包含一个浮点数,表示问题的解。
注意,结果保留 6 位小数。
数据范围
−10000≤n≤10000
输入样例
1000.00
输出样例
10.000000
实现方法
C++ 实现小数输出的方法
引用头文件 #include<iomanip>,常用cout<<fixed<<setprecision(8)<<(变量名)<<endl;
四舍五入法:
floor() 不大于自变量的最大整数
ceil() 不小于自变量的最大整数
round() 四舍五入到最邻近的整数
1. 方法一(pow函数)
pow(x, y)详解
头文件:math.h/cmath(C++中)。
功能:用于计算x的 y 次幂。
返回值:返回幂指数的结果,即 x 的 y 次幂。若 x 为负数且 y 为 小数,或者 x 为 0 且 y 小于等于 0 ,将出现结果错误。(当 x 为负数要进行特殊处理)
返回类型:double型,当为int,float时会给警告。
实现代码
#include <bits/stdc++.h> using namespace std; int main() { double n,res; cin>>n; if(n>=0) { res=pow(n,1.0/3); } else { res=(-1)*pow((-1)*n,1.0/3); } cout<<fixed<<setprecision(6)<<res<<endl; system("pasue"); return 0; }
2. 方法二(STL——cbrt函数)
cbrt(x) 函数详解
- 头文件:cmath。
- 功能:用于计算的立方根。
- 返回值:给定数字 x 的立方根。
- 返回类型:double型。
实现代码
#include <bits/stdc++.h> using namespace std; int main() { double n,res; cin>>n; res=cbrt(n); cout<<fixed<<setprecision(6)<<res<<endl; system("pasue"); return 0; }
3. 方法三(浮点二分)
实现代码
#include <bits/stdc++.h> using namespace std; int main() { double n; cin >> n; double l=-10000,r=10000; while(r-l>1e-8) { double mid=(l+r)/2.0; if (mid*mid*mid>=n) { r=mid; } else { l=mid; } } cout<<fixed<<setprecision(6)<<l<<endl; system("pause"); return 0; }