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;
}