0
点赞
收藏
分享

微信扫一扫

【PAT (Basic Level) Practice】——【简单数学】1051 复数乘法

文章目录

一【题目难度】

  • 乙级

二【题目编号】

  • 1051 复数乘法 (15 分)

三【题目描述】

  • 复数可以写成 ( A + B i ) (A+Bi) (A+Bi) 的常规形式,其中 A A A 是实部, B B B 是虚部, i i i 是虚数单位,满足 i 2 = − 1 i^2 =−1 i2=1;也可以写成极坐标下的指数形式 ( R × e ( P i ) ) (R×e^{(Pi)} ) (R×e(Pi)),其中 R R R 是复数模, P P P 是辐角, i i i 是虚数单位,其等价于三角形式 R ( c o s ( P ) + i s i n ( P ) ) R(cos(P)+isin(P)) R(cos(P)+isin(P))
  • 现给定两个复数的 R R R P P P,要求输出两数乘积的常规形式。

四【题目示例】

  • 输入格式:
    输入在一行中依次给出两个复数的 R 1 ​ , P 1 ​ , R 2 ​ , P 2 R_1​ , P_1​ , R_2​ , P_2 R1,P1,R2,P2​ ,数字间以空格分隔。

  • 输出格式:
    在一行中按照 A+Bi 的格式输出两数乘积的常规形式,实部和虚部均保留 2 位小数。注意:如果 B 是负数,则应该写成 A-|B|i 的形式。

  • 输入样例:
    2.3 3.5 5.2 0.4

  • 输出样例:
    -8.68-8.23i

五【解题思路】

  • 这个题不难,但是坑巨恶心,首先要理解题意,说简单点就是按照乘法和指数运算得到两个实部和虚部,按照要求输出即可,但是又一个测试点一直过不去,也就是我要说的两个坑:
    ①:如果当前数字处于 ( − 0.005 , 0 ) (-0.005,0) (0.0050)之间,根据四舍五入是0.00,而不是-0.00
    ②:不要使用float类型,要使用double类型,具体为什么我也不清楚,就是碰巧改了,AC了,如果有懂得希望可以请教!

六【最终得分】

  • 15分

七【代码实现】

#include<stdio.h>
#include<math.h>
int main()
{
    double R1,P1,R2,P2,R,P,cosP,sinP,A,B;
    scanf("%lf %lf %lf %lf",&R1,&P1,&R2,&P2);
    R = R1*R2;
    P = P1+P2;
    cosP = cos(P);
    sinP = sin(P);
    A = R * cosP;
    B = R * sinP;
    if(A > -0.005 && A < 0)
    {
        A = 0;
    }
    if(B > -0.005 && B < 0)
    {
        B = 0;
    }
    if(B >= 0)
    {
        printf("%.2lf+%.2lfi",A,B);
    }
    else
    {
        printf("%.2lf-%.2lfi",A,-B);
    }
    return 0;
}

八【提交结果】

在这里插入图片描述

举报

相关推荐

0 条评论