题意:
计算一个浮点数的立方根,保留一位小数。
方法一:
二分
思路:初始化左右区间 l , r 。
如果大于给定数,则 r = mid ;否则 l = mid 。
最后,l 即为答案。
#include <bits/stdc++.h> using namespace std; int main(){ double x; cin >> x; double l=-20,r=20,mid; while(fabs(r-l)>0.001){//确保精度,保留一位小数 mid=(l+r)/2; if(mid*mid*mid>=x)//如果大于给定数,则r=mid r=mid; else//否则l=mid l=mid; } printf("%.1f\n",l); return 0; }
时间复杂度:空间复杂度:
方法二:
牛顿迭代法
思路:
#include <bits/stdc++.h> using namespace std; int main(){ double y,x=1; cin >> y;//输入 while(fabs(x*x*x-y)>0.001){//牛顿迭代法 x=x-(x*x*x-y)/(3*x*x); } printf("%.1f\n",x); return 0; }
时间复杂度:空间复杂度: