1051 复数乘法 (15 point(s))
#include <bits/stdc++.h>
using namespace std;
int main() {
double R1, P1, R2, P2, A, B;
cin >> R1 >> P1 >> R2 >> P2;
A = R1 * R2 * (cos(P1) * cos(P2) - sin(P1) * sin(P2));
B = R1 * R2 * (cos(P1) * sin(P2) + sin(P1) * cos(P2));
if(abs(A) < 0.01) A = 0;
if(abs(B) < 0.01) B = 0;
// 保留两位小数
if(B >= 0)
printf("%.2f+%.2fi", A, B);
else
printf("%.2f%.2fi", A, B);
}
日常不看题目,还以为给出的 R 和 P 就是实部和虚部,傻逼一样用交叉相乘的方式,结果是新的极坐标式的定义。
所以读题的时候还是应该把题目给出的定义先明确清楚,每个符号的具体含义或者解释是什么,可以用中文来描述一下。
还有考虑浮点数等于 0 的情况,看别人说当浮点数为负数的时候,四舍五入到 0 仍然会带上负号 - 。但是题目要求的应该是 0.00 。所以根据题目给出的 0.00 的位数,然后在 [-0.01, 0.01] 区间内的都算成 0 即可。简便地判断可以对结果采用绝对值的方式,abs() < 0.01 即可。
浙公网安备 33010602011771号