/ Vijos / 讨论 / 问答 /

管理员请解释一下这是什么错误?

p1116 一元三次方程
用printf输出就是错的,改成cout就过了,怎么回事?

#include<cstdio>
#include <iomanip>
#include<cmath>
#include<iostream>
using namespace std;

const double precision=0.000001;
double a,b,c,d;

double f(double x)
{
return a*x*x*x+b*x*x+c*x+d;
}

double get(double l,double r)
{
double mid;
while(r-l>=0.001)
{
mid=(l+r)/2;
if(f(l)*f(mid)<=precision)r=mid;
else l=mid;
}
return l;
}

int main()
{
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
int k=0; double ans[3],x=-100.0;
while(x<100.5 && k<3)
{
if(abs(f(x))<=precision)
{
ans[k++]=x,x+=1;
continue;
}
if(abs(f(x+1))<=precision)
{
ans[k++]=x+1,x+=2;
continue;
}
if(f(x)*f(x+1)<0)ans[k++]=get(x,x+1);
x+=1;
}
//ans[0]=-1.00,ans[1]=1.00,ans[2]=2.00;
// printf("%.2lf %.2lf %.2lf\n",ans[0],ans[1],ans[2]);
cout<<fixed<<setprecision(2)\
<<ans[0]<<' '<<ans[1]<<' '<<ans[2];
return 0;
}

1 条评论

  • @ 2015-08-25 14:43:13

    double 的输出占位符是"%f",输入时才是“%lf”

  • 1