1. 程式人生 > 實用技巧 >1051 複數乘法 (15分)

1051 複數乘法 (15分)

1051 複數乘法 (15分)

複數可以寫成 (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



程式碼講解:這題看起來非常簡單,但是坑真是不少啊,開始寫的時候,一提交
倆個測試點過不去,然後我想是不是虛部和實部為0的時候就不輸出了,後來發現
不是是,在精確度上會有問題,虛部當少於1e-3的時候按道理應該輸出+0.00i,
但是由於符號保留的原因會輸出-0.00i。。。那不如做個處理,讓小於1e-3的都為
零。。。。






#include<stdio.h>
#include<math.h>
int main()
{
double r1,p1,r2,p2;
scanf("%lf%lf%lf%lf",&r1,&p1,&r2,&p2);
double real_1,complex_1,real_2,complex_2;
real_1=r1*cos(p1);
complex_1=r1*sin(p1);
real_2=r2*cos(p2);
complex_2=r2*sin(p2);
double real,complex;
real=real_1*real_2-complex_1*complex_2;
complex=real_1*complex_2+complex_1*real_2;
if(fabs(real)<1e-3)
real=0;
if(fabs(complex)<1e-3)
complex=0;
printf("%.2f%+.2fi\n",real,complex);
return 0;
}