欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PAT - 1051 复数乘法

程序员文章站 2022-07-15 13:49:12
...

题目链接:点击打开链接

 

题目大意:略。

 

解题思路:略。

 

AC代码

#include<bits/stdc++.h>
#include<cmath>

#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f
#define MOD 1000000007

using namespace std;

typedef long long ll;

// (a+bi)(c+di)=(ac­bd)+(bc+ad)i.
// R(cos(P)+isin(P))=a+bi

int main()
{
    double r1,p1,r2,p2,a,b,c,d,A,B;
    while(~scanf("%lf%lf%lf%lf",&r1,&p1,&r2,&p2))
    {
        a=r1*cos(p1);
        b=r1*sin(p1);
        c=r2*cos(p2);
        d=r2*sin(p2);
        A=a*c-b*d;
        B=b*c+a*d;
        // (a+bi)(c+di)=(ac­bd)+(bc+ad)i 公式套用
        if(fabs(A)<0.0005) //相当于if(A==0) / 0.0005只因double失去精度
            printf("0.00"); // fabs(A)<0.0005实际上约等于0
        else printf("%.2f",A);
        if(fabs(B)<0.0005) 
            printf("+0.00i\n");
        else if(B>0)//B>0 当B为正数时,前面没有'+';当B为负数时,前面有'-',所以不必加减号。
            printf("+%.2fi\n",B);
        else 
            printf("%.2fi\n",B);
    }

    return 0;
}
//        if(A==0)
//        A=0.01,  0.0000000009
//        fabs(A)== 0.000000003    // 0.2
//        fabs(A)== -0.000000000000000003    // 0.2

 

相关标签: 1051复数乘法 PA