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 即可。

参考代码

评论有解释浮点数四舍五入问题

posted on 2021-09-02 15:57  Atl212  阅读(47)  评论(0)    收藏  举报

导航