实在太菜了、、竟然不知道浮点数有误差、、、
另外:修改的时候一次要改全!!!
码:
#include<iostream>
#include<cstdio>
using namespace std;
#include<cmath>
double a,ans[6],b,c,d,j,i;
int qushi,cnt;
int main()
{
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
for(i=-100;i<=100;i++)
{// cout<<i<<" "<<i*(i*(a*i+b)+c)+d<<"pp";
if(i==-100)
{
if(i*(i*(a*i+b)+c)+d>0)qushi=1;
// printf("%.5lf",fabs(i*(i*(a*i+b)+c)+d));
if(fabs(i*(i*(a*i+b)+c)+d)<=0.0001){ans[++cnt]=i;}
if(i*(i*(a*i+b)+c)+d<0)qushi=0;
continue;
}
if(fabs(i*(i*(a*i+b)+c)+d)<=0.001)
{ans[++cnt]=i;continue;}
if((i*(i*(a*i+b)+c)+d>0&&qushi==0)||(i*(i*(a*i+b)+c)+d<0&&qushi==1))
{ qushi^=1;
j=double(i-1)+0.001;
while(j<i)
{ if(fabs(j*(j*(a*j+b)+c)+d)<=0.001)
{
ans[++cnt]=j;break;
}
if(((j*(j*(a*j+b)+c)+d)>0&&((j+0.001)*((a*j+0.001)*((j+0.001)+b)+c)+d)<0)||((j*(j*(a*j+b)+c)+d)<0&&((j+0.001)*((a*j+0.001)*((j+0.001)+b)+c)+d)>0))
{
ans[++cnt]=j;break;
}
j+=0.001;
}
}
}
printf("%.2lf %.2lf %.2lf",ans[1],ans[2],ans[3]);
}