【题目】来源:xmuoj
【分析】
此题要求用二分法,二分法具体介绍见二分法求方程的根-CSDN博客
这题输入浮点数n后,可看作函数为f(x)=x*x*x-n=0,转化为求f(x)的解。注意浮点数有正负之分,把负数转成正数后再处理更便捷。
【核心代码】
#include <stdio.h>
#include <math.h>
const double eps=1e-8;//定义我们计算的精度 ,保留6位小数(6+2=8)
double n;
double f(double x){
return x*x*x-n;//定义函数方程
}
int main(){
int flag=0;
scanf("%lf",&n);
if(n<0){
n=-n;
flag=1;
}//先处理负数
double a=0,c;//确定区间两端a,b的初值,c为中点
double b=(n>1.0)?n:1.0;//注意此处b的初值,比如0.0001开三次方是0.1,即边界大于了n,所以当n<1.0时,边界应为1.0
while(fabs(a-b)>eps){
c=(a+b)/2;
if(fabs(f(c))<eps)break;//c为零点
else if((f(c))*f(a)>0)a=c;//更新
else if(f(c)*f(b)>0)b=c;//更新 9
}
c=(a+b)/2;//最终二分法得到的零点
if(flag)printf("%.6f",-c);//输出负数
else printf("%.6f",c);
return 0;
}