1. 程式人生 > >PAT乙級—1051. 複數乘法 (15)-native

PAT乙級—1051. 複數乘法 (15)-native

複數可以寫成(A + Bi)的常規形式,其中A是實部,B是虛部,i是虛數單位,滿足i2 = -1;也可以寫成極座標下的指數形式(R*e(Pi)),其中R是複數模,P是輻角,i是虛數單位,其等價於三角形式(R(cos(P) + isin(P))。

現給定兩個複數的R和P,要求輸出兩數乘積的常規形式。

輸入格式:

輸入在一行中依次給出兩個複數的R1, P1, R2, P2,數字間以空格分隔。

輸出格式:

在一行中按照“A+Bi”的格式輸出兩數乘積的常規形式,實部和虛部均保留2位小數。注意:如果B是負數,則應該寫成“A-|B|i”的形式。

輸入樣例:
2.3 3.5 5.2 0.4
輸出樣例:
-8.68-8.23i

思路:本題的坑主要是在比如當P的值為-0.0023的時候,取兩位小數,則得到的值為-0.00,
按照題意此時應該輸出0.00才行,考慮到若P在-0.005~0之間,則會四捨五入到-0.00,
所以當0.005<P<0,輸出0.00,否則正常輸出。
再看R,同樣,當0.005<R<0的時候,應輸出+0.00i,若R<=-0.005,則正常輸出後加上i,若R大於等於0,則應輸入正常輸出前有+,後有i。`

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main(){
    double
R1,P1,R2,P2; scanf("%lf%lf%lf%lf",&R1,&P1,&R2,&P2); double P=R1*R2*(cos(P1+P2)); double R=R1*R2*(sin(P1+P2)); if(P>-0.005&&P<0) printf("0.00"); else printf("%.2lf",P); if(R>-0.005&&R<0) printf("+0.00i"); else if(R<=-0.005
) printf("%.2lfi",R); else printf("+%.2lfi",R); return 0; }

題目連結: