本题目要求一元二次方程ax2+bx+c=0的根,结果保留2位小数。
输入格式:
输入在一行中给出3个浮点系数a、b、c,中间用空格隔开。
输出格式:
根据系数情况,输出不同结果:
1)如果方程有两个不相等的实数根,则按照格式"x1=大根,x2=小根"输出;
2)如果方程有两个不相等复数根,则按照格式"x1=实部+虚部i,x2=实部-虚部i"输出;
3)如果方程有相等根,则输出x1=x2=此根;
4)如果方程退化为一元一次方程,则输出"x=值”。 --> a=0&&b!=0
5)如果系数都为0,则为任意解,输出"Any Answer";
6)如果a和b为0,c不为0,则无解,输出"No Answer"。
7)结果保留两位小数。
输入样例1:
1 2 1
输出样例1:
x1=x2=-1.00
输入样例2:
3 4 5
输出样例2:
x1=-0.67+1.11i,x2=-0.67-1.11i
Code:
#include<bits/stdc++.h>
#define eps 1e-9
using namespace std;
typedef long long ll;
int main() {
double a,b,c;
cin>>a>>b>>c;
if(a==0&&b!=0) {
double as=-c/b;
printf("x=%.2lf",as);
return 0;
}
if(a==0&&b==0&&c!=0) {
printf("No Answer");
return 0;
}
if(a==0&&b==0&&c==0) {
printf("Any Answer");
return 0;
}
double q=b*b-4*a*c;
int flag=0;
if(q<0) {
q=-q;
flag=1;
}
if(q==0) {
flag=2;
}
double x=-b/(2*a);
// if(x==-0)x=0; ///写不写都可 数据都过了
double x1=sqrt(q)/(2*a);
double x2=sqrt(q)/(2*a);
if(flag==1)
printf("x1=%.2lf+%.2lfi,x2=%.2lf-%.2lfi\n",x,x1,x,x2);
else if(flag==2)
printf("x1=x2=%.2lf\n",x);
else {
x1+=x;
x2=x-x2;
if(x1<x2)///大根在前
{
double t=x1;
x1=x2;
x2=t;
}
printf("x1=%.2lf,x2=%.2lf\n",x1,x2);
}
return 0;
}