1051 复数乘法 (15 分)(测试点2、3答案错误)(算法分析+代码实现)

133 阅读1分钟

1051 复数乘法 (15 分)

题目链接

算法分析

主要就是数学运算,高中及以上应该问题不大
R 1 ∗ e P 1 ∗ i × R 2 ∗ e P 2 ∗ i = ( R 1 ∗ R 2 ) ∗ e ( P 1 + P 2 ) i R_1*e^{P_1*i}×R_2*e^{P_2*i}=(R_1*R_2)*e^{(P_1+P_2)i} R1​∗eP1​∗i×R2​∗eP2​∗i=(R1​∗R2​)∗e(P1​+P2​)i
A = ( R 1 ∗ R 2 ) ∗ c o s ( P 1 + P 2 ) A=(R_1*R_2)*cos(P_1+P_2) A=(R1​∗R2​)∗cos(P1​+P2​)
B = ( R 1 ∗ R 2 ) ∗ s i n ( P 1 + P 2 ) B=(R_1*R_2)*sin(P_1+P_2) B=(R1​∗R2​)∗sin(P1​+P2​)
然后格式化输出A+Bi即可

测试点

这是一开始的情况

在这里插入图片描述
后来发现了问题,出在:我没有对+0.00和-0.00进行统一,按照题目测试点的要求,A的绝对值如果小于0.005,则输出0.00,B的绝对值如果小于0.005,则输出+0.00.
注意:printf自带四舍五入。
补充知识:%+d或者%+f可以带符号输出变量(代码变得更简洁了 )。
对特殊情况进行判断,就通过了。
在这里插入图片描述

代码实现

#include<bits/stdc++.h>
using namespace std;

int main(){
	double a, b, c, d;
	scanf("%lf%lf%lf%lf", &a, &b, &c, &d);
	double A = a * c * cos(b + d), B = a * c * sin(b + d);
	if(fabs(A) < 0.005) printf("0.00");
	else	printf("%.2f", A);
	if(fabs(B) < 0.005) printf("+0.00i");
	else	printf("%+.2fi", B);
	return 0;
}