1. 程式人生 > 其它 >1058:求一元二次方程

1058:求一元二次方程

【題目描述】

利用公式x1=b+b24ac√2ax2=bb24ac√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; }