1058:求一元二次方程
阿新 • • 發佈:2022-05-12
【題目描述】
利用公式x1=−b+b2−4ac√2a,x2=−b−b2−4ac√2ax1=−b+b2−4ac2a,x2=−b−b2−4ac2a,求一元二次方程ax2+bx+c=0ax2+bx+c=0的根,其中aa不等於00。結果要求精確到小數點後55位。
【輸入】
輸入一行,包含三個浮點數a,b,ca,b,c(它們之間以一個空格分開),分別表示方程ax2+bx+c=0ax2+bx+c=0的係數。
【輸出】
輸出一行,表示方程的解。
若兩個實根相等,則輸出形式為:“x1=x2=...x1=x2=...”;
若兩個實根不等,在滿足根小者在前的原則,則輸出形式為:“x1=...;x2=...x1=...;x2=...“;
若無實根輸出“No answer!”。
所有輸出部分要求精確到小數點後5位,數字、符號之間沒有空格。
【輸入樣例】
-15.97 19.69 12.02
【輸出樣例】
x1=-0.44781;x2=1.68075
#include<iostream> #include<iomanip> #include<cstdio> #include<cstring> #include<string> #include<cstdio> #include <cmath> using namespace std; int main(){double a,b,c; cin>>a>>b>>c; double x1,x2; double dlt=b*b-4*a*c; dlt=(int)(dlt*100000)/100000.0; if(dlt<0) cout<<"No answer!"; if(dlt==0){ x1=-b/(2*a); cout<<"x1=x2="<<fixed<<setprecision(5)<<x1; } if(dlt>0){ x1=(-b+sqrt(dlt))/(2*a); x2=(-b-sqrt(dlt))/(2*a); if(x1>x2)swap(x1,x2); cout<<"x1="<<fixed<<setprecision(5)<<x1<<";x2="<<fixed<<setprecision(5)<<x2; } return 0; }