C++求一元二次方程的根利用公式x1 = (-b + sqrt(b*b-4*a*c))/(2*a), x2 = (-b - sqrt(b*b-4*a*c))/(2*a)

下面是我的代码,提交后总是Wrong answer,VS上样例输出没问题,求大神找找错,谢谢
超出最大字数了,题目要求在图里,程序如果不好看请私信我

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

class complex
{
private:
float a[1000],b[1000],c[1000];
double p,q,x1,x2,delta; //p为实部,q为虚部
int m,n,i; //m为设定值,分别对应不同根的个数,n为输入样例组数
int o[1000]; //o[]数组的作用和m类似
public:
void input();
void root();
};

void complex::input()
{
cin>>n;
for (i=0;i<=n-1;i++)
{
cin>>a[i]>>b[i]>>c[i];
}
}

void complex::root()
{
for (i=0;i<=n-1;i++)
{
delta=b[i]*b[i]-4*a[i]*c[i];
if (delta<0)
{
m=0;
o[i]=0;
p=-b[i]/(2*a[i]);
q=sqrt(-delta)/(2*a[i]); //存在虚部的时候的根
}
else if (delta==0)
{
x1=-b[i]/(2*a[i]);
x2=x1; //存在1个根的时候
m=1;
o[i]=1;
}
else if (delta>0)
{
x1=(-b[i] + sqrt(b[i]*b[i]-4*a[i]*c[i]))/(2*a[i]);
x2=(-b[i]-sqrt(delta))/(2*a[i]); //存在两个实根的时候
m=2;
o[i]=2;
}
switch(o[i])
{
case 2:
{
if (x1>x2)
{
cout.setf(ios::fixed);
cout.setf(ios::showpoint); //输出精确到小数点后5位
cout.precision(5);
cout<<"x1="<<x1<<";"<<"x2="<<x2<<endl;
}
else
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(5);
cout<<"x1="<<x2<<";"<<"x2="<<x1<<endl;
break;
}
case 1:
{
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(5);
cout<<"x1=x2="<<x1<<endl;
break;
}
case 0:
{
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(5);
cout<<"x1="<<p<<"+"<<q<<"i"<<";"<<"x2="<<p<<"-"<<q<<"i"<<endl;
break;
}
}
}
}

int main()
{
complex f;
f.input();
f.root();
return 0;
}

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
double a,b,c,d,x1,x2;
cin>>a>>b>>c;
d=b*b-4*a*c;
if(d==0)
{
x1=-b/(2*a);
printf("x1=x2=%0.5f",x1);
}
if(d>0)
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("x1=%0.5f;x2=%0.5f",x1,x2);
}
if(d<0)
{
x1=-b/(2*a);
if (x1==0) x1=0;
x2=sqrt(-d)/(2*a);
printf("x1=%0.5f+%0.5fi;x2=%0.5f-%0.5fi",x1,x2,x1,x2);
}
}

#include<stdio.h>
#include<math.h>
int main()
{
float a,b,c,s,x;
scanf("%f %f %f",&a,&b,&c);
s=(-b/(2*a));
x=sqrt(4*a*c-b*b)/(2*a);
if((b*b)==(4.0*a*c)){

printf("x1=x2=%0.5f",s);
}
else if((b*b)>(4*a*c)){
s=(-b+sqrt(b*b-4*a*c))/(2*a);
x= (-b - sqrt(b*b-4*a*c))/(2*a);
printf("x1=%0.5f;x2=%0.5f",s,x);
}
else if((b*b)<(4*a*c)){
if(s==0) s=0;
printf("x1=%.5f+%.5fi,x2=%.5f-%.5fi",s,x,s,x);
}
return 0;
}

两个答案一样,下面那个我打的,搞不懂为什么通过不了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-02-23
输出部分,else下面的得用括号括起来,望采纳追问

不对啊,还是wrong answer

追答

你能发个测试结果的截图吗?

追问

追答

。。。。是编译出错,还是计算结果错误?你这截图不完备啊

追问

应该是不符合输出,计算结果出错;

是不是因为当一个数如果在(-0.000005,0)之间,输出精确到小数点后5位,就是0而不是期望的0.000.。,所以需要判断处理一下输出数据?

追答

我还是不明白你的计算结果出错,错的是个什么情况,你应该把输出的命令窗口截个图;应该不是精度问题,5位精度一下的可以认为是0.编译通过了应该就没错了。

追问

我输入样例是没有问题的,但在online judge提交后就显示wrong answer

追答

。。。。
这个我就不太明白,如果计算没错的话,那么就得看你的输出格式是否满足题目要求。

本回答被网友采纳
第2个回答  2019-03-04
你的代码怎么这么长?我只写了三十来行啊……
相似回答