PAT --- 1051.复数乘法 (15 分)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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))

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

输入格式:

输入在一行中依次给出两个复数的 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;
}

猜你喜欢

转载自blog.csdn.net/MissXy_/article/details/86601539