【最详细】测试点分析_1051 复数乘法 (15分)_14行代码AC
立志用更少的代碼做更高效的表達
Pat乙級最優化代碼+題解+分析匯總——>傳送門
復數可以寫成 (A+Bi) 的常規形式,其中 A 是實部,B 是虛部,i 是虛數單位,滿足 i2=?1i^2=?1i2=?1;也可以寫成極坐標下的指數形式 (R×e?(Pi))(R×e^?(Pi))(R×e?(Pi)),其中 R 是復數模,P 是輻角,i 是虛數單位,其等價于三角形式 R(cos(P)+isin(P))R(cos(P)+isin(P))R(cos(P)+isin(P))。
現給定兩個復數的 R 和 P,要求輸出兩數乘積的常規形式。
輸入格式:
輸入在一行中依次給出兩個復數的 R?1 , P?1 , R?2, P2,數字間以空格分隔。
輸出格式:
在一行中按照 A+Bi 的格式輸出兩數乘積的常規形式,實部和虛部均保留 2 位小數。注意:如果 B 是負數,則應該寫成 A-|B|i 的形式。
輸入樣例:
2.3 3.5 5.2 0.4
輸出樣例:
-8.68-8.23i
問題分析
輸入P和R后, 我們就可以根據公式R(cos(P)+isin(P))R(cos(P)+isin(P))R(cos(P)+isin(P))得出形如a+bia+bia+bi的值, 最后相乘即可。
注意:
1、當虛部為正數時,需要手動輸出+號
2、當實部或虛部為0時,需要輸出0.00。 因為題中要求我們保留兩位小數
3、還要考慮一種特殊情況, 如果輸入的數都是形如0.00001這樣的數, 計算的結果小于0.005時, 就可以判定為是0了(因為四舍五入后為0.00)。(后兩個測試點)
4、實數求絕對值要用fabs(),整數求絕對值使用abs()
#include<bits/stdc++.h> using namespace std; int main() {double r1, p1, r2, p2;cin >> r1 >> p1 >> r2 >> p2;double shi = r1*r2*cos(p1)*cos(p2)-r1*r2*sin(p1)*sin(p2);double xv = r1*r2*cos(p1)*sin(p2)+r1*r2*sin(p1)*cos(p2);if(fabs(shi) < 0.005) printf("0.00");else printf("%.2lf", shi);if(fabs(xv) < 0.005) printf("+0.00i\n");else if(xv < 0) printf("%.2lfi\n", xv);else printf("+%.2lfi\n", xv);return 0; }
每日一句
每一個不曾起舞的日子,都是對生命的辜負
總結
以上是生活随笔為你收集整理的【最详细】测试点分析_1051 复数乘法 (15分)_14行代码AC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【最全解析】1050 螺旋矩阵 (25分
- 下一篇: 【最详细解析】1052 卖个萌 (20分