AC代码如下:
#include<bits/stdc++.h>
using namespace std;
//一元三次方程
double a,b,c,d;//全局变量 方便传进jisuan函数使用
double jisuan(double x)
{
return a*x*x*x+b*x*x+c*x+d;
}
int main()
{
cin>>a>>b>>c>>d;
int sum;
double l,r;
double m;
for(int i=-100; i<=100; i++) //由于每个跟差值绝对值大于1 所以可以以1
//为跨度进行区间判断
{
double l=i;
r=i+1;
double x1=jisuan(l);
double x2=jisuan(r);
if(!x1)
{
sum++;//不能判断右端点 会重复
if(sum!=3)
printf("%.2f ",l);
else
printf("%.2f",l);//判断左端点是不是0点 是的话直接输出
}
if(x1*x2<0)
{
while(r-l>0.001)//因为保留两位小数 若两个数差值小于等于0.001
{
//则这两个数保留两位小数结果必定相同
m=(r+l)/2;
double x3=jisuan(m);
if(x3*x2<=0)//要加等号 因为二分的点有可能是零点
{
l=m;
}
else
{
r=m;
}
}
sum++;
if(sum!=3)
printf("%.2f ",l);
else
printf("%.2f",l);
}
if(sum==3)
{
break;//找到三个根就退出循环 节约时间
}
}
return 0;
}