description
利用公式x1 = (-b + sqrt(b*b-4*a*c))/(2*a), x2 = (-b - sqrt(b*b-4*a*c))/(2*a)求一元二次方程ax2+ bx + c =0的根,其中a不等於0。
input
輸入一行,包含三個浮點數a, b, c(它們之間以乙個空格分開),分別表示方程ax2 + bx + c =0的係數。
output
輸出一行,表示方程的解。
若b2 = 4 * a * c,則兩個實根相等,則輸出形式為:x1=x2=...。
若b2 > 4 * a * c,則兩個實根不等,則輸出形式為:x1=...;x2 = ...,其中x1>x2。
若b2 < 4 * a * c,則有兩個虛根,則輸出:x1=實部+虛部i; x2=實部-虛部i,即x1的虛部係數大於等於x2的虛部係數,實部為0時不可省略。實部 = -b / (2*a), 虛部 = sqrt(4*a*c-b*b) / (2*a)
所有實數部分要求精確到小數點後5位,數字、符號之間沒有空格。
sample input
sample output樣例輸入1
1.0 2.0 8.0
樣例輸入2
1 0 1
solution樣例輸出1
x1=-1.00000+2.64575i;x2=-1.00000-2.64575i
樣例輸出2
x1=0.00000+1.00000i;x2=0.00000-1.00000i
1) 用double ,不要用 float,float精度不夠#include #include #include using namespace std;
#define eps 1e-7
int main()
else
return 0;
}
2) double 型別變數是用 %lf 讀入的,不是 %f。輸出double值可以用 %f
3)不要用 a == b的辦法判斷兩個浮點數是否相等,包括不要用 a== 0的辦法判斷浮點數 a是否等於0,因為浮點數是有誤差的。 應該用 a-b > -eps && a-b < eps ,即a和b的差的絕對值小於某個很小值 eps的辦法來判斷a和b是否相等。如果結果要保留小數點後面n位,那麼 eps可以取 10的-(n+1)次方
4) 為避免出現 -0.000這樣的輸出,對要輸出的值要先判斷是不是足夠接近0,如果是,就直接輸出 0.0。 例如如果要保留小數點後面 n位,那麼 eps 就取 10的-(n+1)次方,然後 認為 數的絕對值小於 eps時,就是0
5) 最好不要用 a!=b 判斷a,b是否相等, a > b, a < b 比較a,b大小。和4)類似,用兩者的差的絕對值和 eps比較
求一元二次方程的根
求一元二次方程的根 總時間限制 1000ms 記憶體限制 65536kb 描述 利用公式x1 b sqrt b b 4 a c 2 a x2 b sqrt b b 4 a c 2 a 求一元二次方程ax2 bx c 0的根,其中a不等於0。輸入 輸入一行,包含三個浮點數a,b,c 它們之間以乙個空格...
求一元二次方程的根
描述 利用公式x1 b sqrt bb 4ac 2a x2 b sqrt bb 4ac 2a 求一元二次方程ax2 bx c 0的根,其中a不等於0。輸入輸入一行,包含三個浮點數a,b,c 它們之間以乙個空格分開 分別表示方程ax2 bx c 0的係數。輸出輸出一行,表示方程的解。若b2 4 a c...
求一元二次方程的根
從鍵盤上任意輸入 a,b,c 的值,程式設計計算並輸出一元二次方程 ax2 bx c 0 的根 當 a 0 時,輸出 not quadratic equation with one unknown 當 a 0 時,分 b2 4ac 0 b2 4ac 0 b2 4ac 0 三種情況計算並輸出方程的根。...