PAT B1051 复数乘法(C++)

PAT甲级目录 | PAT乙级目录

题目描述

B1051 复数乘法

解题思路

格式化输出,考虑保留小数后为 0 时的符号。

易错点

  • 当 $ -0.005 < A < 0 $ 时,保留两位小数将输出 -0.00
    • 正确输出应为 0.00,所以需要特判

也许陌生的知识点

  • sort(S, S + N, cmp);
    • 排序函数,实现 [first, last) 范围内的排序,可以自定义排序策略 cmp 函数
    • 所需头文件: algorithm
  • memset(s,0,sizeof(s));
    • 将 s 所指向的某一块内存中的后一定范围内的内容全部设置为指定的 ASCII 值, memset(<内存地址>, <指定的 ASCII 码>, <地址大小>);
    • memset 函数按字节对内存块进行初始化,所以不能用它将 int 数组初始化为 0 和 -1 之外的其他值
    • 所需头文件:cstring
  • char a[5]; memset(a, 97, 5 * sizeof(char));
    • 可将字符数组 a 初始化为 aaaaa

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <cstdio>
#include <cmath>
int main(){
double R1, P1, R2, P2, A, B;
scanf("%lf %lf %lf %lf", &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(A < 0 && A > -0.005) printf("0.00");
else printf("%.2f", A);
if(B < 0 && B > -0.005) printf("+0.00i\n");
else if(B >= 0) printf("+%.2fi\n", B);
else printf("%.2fi\n", B);
return 0;
}