PAT乙級—1051. 複數乘法 (15)-native
阿新 • • 發佈:2019-01-06
複數可以寫成(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;
}
題目連結: