这道题的二分原理题目已给出:f(x)*f(x+1)<0时,x至x+1中必有一根。那么,我们只需要循环-100至100,再用分治考虑小数部分就可以了。下面附上代码:
#include<bits/stdc++.h>
using namespace std;
double a,b,c,d;
double _(double x)
{
return a*x*x*x+b*x*x+c*x+d;//方程部分
}
int main()
{
int i;
double x,y,mid;
cin>>a>>b>>c>>d;
for (i=-100;i<=100;i++)//循环,枚举查找
{
x=i;y=x+1;//两个指针
if (_(x)==0){printf("%.2f",x);cout<<" ";}//如果符合条件则直接输出
else if (_(x)*_(y)<0)//如果其中有解就开始二分
{
while (y-x>=0.001)//精度要求
{
mid=(x+y)/2;
if (_(mid)*_(x)<=0)y=mid;//判断解在哪个区间
else x=mid;
}
printf("%.2f",x);cout<<" ";
}
}
return 0;
}