1. 二分法
我们二分法的循环终止条件while(right-left<0.001),接着中间是正常的二分法。
它要求立方根精确到小数点后一位,这里要注意。
注意输出的话,因为有要求,所以不能直接用cout,而是用printf(".1lf",mid)
#include<iostream>
using namespace std;
int main(){
double a;
cin>>a;
double left=1.0,right=a,mid;
while(right-left>0.001){
mid=left+(right-left)/2;
if(mid*mid<a/mid){
left=mid;
}
else {
right=mid;
}
}
printf("%.1lf",mid);
return 0;
}
注意:这里的left=mid,right=mid;
2. 牛顿迭代法:
简言之最终就是有这么一个公式:x(n+1)=x(n)-f(xn)/f'(xn),当迭代到一定的程度,x(n+1)和x(n)相等,将它们统一当做根x的话,就有x=x-f(x)/f'(x).
那么我们要求立方根的话,就是f(x)=x^3-y,令f(x)=0,即为y的立方根。
代入上面的公式有:x=x-(x^3-y)/(x^3-y)'=(2*x+y/x/x)/3,这里用迭代法即可,这里的y即为题目要求的a
#include<iostream>
#include<cmath>
using namespace std;
int main(){
double a;
cin>>a;
double x=1.0;
for(x;abs(x*x*x-a)>1e-7;x=(2*x+a/x/x)/3){//不断迭代
}
printf("%.1lf",x);
return 0;
}