版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MissXy_/article/details/86601539
1051 复数乘法 (15 分)
复数可以写成 (A+Bi)(A + Bi)(A+Bi) 的常规形式,其中 AAA 是实部,BBB 是虚部,iii 是虚数单位,满足 i2=−1i^2 = -1i2=−1;也可以写成极坐标下的指数形式 (R×e(Pi))(R\times e^{(Pi)})(R×e(Pi)),其中 RRR 是复数模,PPP 是辐角,iii 是虚数单位,其等价于三角形式 (R(cos(P)+isin(P))(R(\cos (P) + i \sin (P))(R(cos(P)+isin(P))。
现给定两个复数的 RRR 和 PPP,要求输出两数乘积的常规形式。
输入格式:
输入在一行中依次给出两个复数的 R1R_1R1, P1P_1P1, R2R_2R2, P2P_2P2,数字间以空格分隔。
输出格式:
在一行中按照 A+Bi
的格式输出两数乘积的常规形式,实部和虚部均保留 2 位小数。注意:如果 B
是负数,则应该写成 A-|B|i
的形式。
输入样例:
2.3 3.5 5.2 0.4
输出样例:
-8.68-8.23i
思路
此题为简单的数学计算题,提交之后有一个测试点不给过才发现还是考虑的不周。
题意要求保留两位小数,如果result1
或者result2
的值大于-0.001小于0,比如-0.0001
,如果不做判定就会输出-0.00
,事实上应该输出0.00
,所以在输出是时候加一个判定,详情看代码。
代码
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double R1, P1, R2, P2;
cin >> R1 >> P1 >> R2 >> P2;
double A1, B1, A2, B2;
A1 = R1 * cos(P1);
B1 = R1 * sin(P1);
A2 = R2 * cos(P2);
B2 = R2 * sin(P2);
double result1 = A1 * A2 - B1 * B2;
double result2 = A1 * B2 + B1 * A2;
if (result2 == 0) { //如果虚部为0 只输出实部
cout << result1; return 0;
}
printf("%s%.2f%s%.2fi", result1 >= -0.001 ? "" : "-",abs(result1),
result2 >= -0.001 ? "+" : "-", abs(result2));
return 0;
}