PAT-B-1051-复数乘法

复数可以写成 (A+B**i) 的常规形式,其中 A 是实部,B 是虚部,i 是虚数单位,满足 i2=−1;也可以写成极坐标下的指数形式 (R×e(P**i)),其中 R 是复数模,P 是辐角,i 是虚数单位,其等价于三角形式 R(cos(P)+isin(P))。

现给定两个复数的 RP,要求输出两数乘积的常规形式。

输入格式:

输入在一行中依次给出两个复数的 R1, P1, R2, P2,数字间以空格分隔。

输出格式:

在一行中按照 A+Bi 的格式输出两数乘积的常规形式,实部和虚部均保留 2 位小数。注意:如果 B 是负数,则应该写成 A-|B|i 的形式。

输入样例:

1
2.3 3.5 5.2 0.4

输出样例:

1
-8.68-8.23i

思路

  1. 读入R1、P1、R2、P2。
  2. A=(R1R2)cos(P1+P2),B=(R1R2)sin(P1+P2)。
  3. 如果A的绝对值小于0.01,A=0。
  4. 如果B的绝对值小于0.01,B=0。
  5. 如果B小于零,输出A-|B|i,否则B输出A+Bi。输出时,每个数字保留两位。

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cmath>
using namespace std;

int main(){

double R1,P1,R2,P2;
scanf("%lf%lf%lf%lf",&R1,&P1,&R2,&P2);
//对两个复数的三角函数形式做积
R1*=R2;
P1+=P2;

double r,v;
r = fabs(R1 * cos(P1))<0.01?0.0:R1 * cos(P1);
v = fabs(R1 * sin(P1))<0.01?0.0:R1 * sin(P1);
if(v<0)
printf("%.2lf%.2lfi", r, v);
else
printf("%.2lf+%.2lfi", r, v);
return 0;
}

----\(˙<>˙)/----赞赏一下吧~