看了看贺老师的博客,原来oj也有缺陷.....
参考老师的代码
#include <stdio.h>
#include <math.h>
int main ( )
{
float a,b,c,d,pr,pi,x1,x2;
scanf("%f %f %f",&a,&b,&c);
d=b*b-4*a*c;
if(d>=0)
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("%.2f %.2f\n",x1,x2);
}
else
{
pr=-b/(2*a);
pi=sqrt(-d)/(2*a);
if(a>0)
{
printf("%.2f+%.2fi ",pr,pi);
printf("%.2f-%.2fi\n",pr,pi);
}
else
{
printf("%.2f+%.2fi ",pr,-pi);
printf("%.2f-%.2fi\n",pr,-pi);
}
}
return 0;
}
利用共轭复根简化后
#include <stdio.h>
#include <math.h>
int main ( )
{
float a,b,c,d,pr,pi,x1,x2;
scanf("%f %f %f",&a,&b,&c);
d=b*b-4*a*c;
if(d>=0)
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("%.2f %.2f\n",x1,x2);
}
else
{
pr=-b/(2*a);
pi=sqrt(-d)/(2*a);
if(a<0) //这儿利用了共轭复根的对称性,反正输出那个形式就行
pi=-pi;
printf("%.2f+%.2fi ",pr,pi);
printf("%.2f-%.2fi\n",pr,pi);
}
return 0;
}
小小复根竟然是如此玄妙....对崔翔同学表示敬佩........