二分查找法求解一元三次方程组
本题使用二分查找求解
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;double a,b,c,d;// 求出方程的值
double f(double x)
{return a*pow(x,3)+b*pow(x,2)+c*x+d;
}void find(double l,double r)
{// 若精度在可控范围内,则直接输出 if(fabs(r-l)<0.001){printf("%.2f ",r);return;}double mid = (l+r)/2;if(f(mid)==0){printf("%.2f ",mid);return;}// 零点一定在l,mid 之间 if(f(l)*f(mid)<0) find(l,mid);else find(mid,r);
}int main(void)
{scanf("%lf%lf%lf%lf",&a,&b,&c,&d);int cnt= 0;for(double i=-100;i<=100,cnt<3;i++){if(f(i)==0){printf("%.2f ",i);cnt++;continue;}// 根的数量不会超过3个 if(f(i)*f(i+1)<0){find(i,i+1);cnt++;}}return 0;
}