题目描述
给定一个浮点数n,求它的三次方根。
样例
输入:1000.00
输出:10.000000
算法1
(暴力枚举) $O(n)$
从1到x枚举,若$\sqrt[3]{x}$和枚举出的数相等(或$枚举出的数^{3}$和x相等)
时间复杂度
参考文献
C++ 代码
#include<iomanip>
#include<iostream>
using namespace std;
double x,ans;
int main(){
ios::sync_with_stdio(false);
cin>>x;
for(ans=1;x-ans*ans*ans>1e-8;ans+=0.000001);
cout<<fixed<<setprecision(6)<<ans-0.000001<<endl;
return 0;
}
算法2
(二分) $O(logn)$
上一个算法能得0分,答案都不对(我自己代码的问题,别找算法的问题,呵呵。),所以,现在上
二分!!
时间复杂度
参考文献
C++ 代码
#include<iomanip>
#include<iostream>
using namespace std;
double x,l=-10000,r=10000,mid;
int main(){
ios::sync_with_stdio(false);
cin>>x;
while(r-l>1e-8){
mid=(l+r)/2;
if(mid*mid*mid>=x)r=mid;
else l=mid;
}
cout<<fixed<<setprecision(6)<<l<<endl;
return 0;
}