PAT Basic Level 1051 复数乘法 (15 分)

题目链接:

https://pintia.cn/problem-sets/994805260223102976/problems/994805274496319488

利用到数学知识:复数可以用极坐标方式表示,当用极坐标方式表示时,

写成极坐标下的指数形式 (R×e​(Pi)​​),其中 R 是复数模,P 是辐角,i 是虚数单位,其等价于三角形式 (R(cos(P)+isin(P))。

在极坐标情况下,求两复数的积,公式:Rs=R1*R2*cos(P1+P2),Ps=R1*P2*sin(P1+P2),

关于极坐标下的复数乘积,在电路分析,电工电子中均以考题形式出现过(很简单的,)

AC代码:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;

int main()
{
    double R_1,P_1,R_2,P_2;
    scanf("%lf%lf%lf%lf",&R_1,&P_1,&R_2,&P_2);
    double R_S=0,P_S=0;
    R_S=R_1*R_2*cos(P_1+P_2);
    P_S=R_1*R_2*sin(P_1+P_2);
    if(R_S>-0.05&&R_S<0){//为什么不判断实部小于0.05,且大于0的情况??
    //因为题目说要保留两位小数,>0.005时,会自动进位,0.01,所以,
    //接下来都是实部与虚部与0.005的关系作为判断条件
    //为什么只在-0.005和0之间做判断,当数字大于-0.005时,如果不判断的话,会输出-0.00,所以要特殊判断
        printf("0.00");
    }
    else
        printf("%.2lf",R_S);
    if(P_S>0){
        printf("+%.2lfi",P_S);
    }
    else if(P_S<0&&P_S>-0.05){//小数限制
                            //为什么不判断虚部小于0.05,且大于0的情况
        printf("+0.00i");
    }
    else{
        printf("%.2lfi",P_S);
    }
    return 0;
}

 

二刷:关键在于0的判断,因为是小数,小数与某个整数大小比较是否相等,应该是判断abs(x) <= 0.000001, 但在这里与0判断的话,要求我们保留2位小数,我们认为abs(x)<=0.001就可以。

另外,数据元素应该用float型,而非double型,因为:float精确到小数点后6-7位,double精确到小数点之后14-15位。

 


#include<stdio.h>
#include<math.h>


int main()
{
	freopen("D://input.txt", "r", stdin);
	double r1, p1, r2, p2;
	scanf("%lf %lf %lf %lf", &r1, &p1, &r2, &p2);
	
	double A = r1*r2*cos(p1)*cos(p2) - r1*r2*sin(p1)*sin(p2);
	double B = r1*r2*cos(p1)*sin(p2) + r1*r2*sin(p1)*cos(p2);
	
	if(fabs(A) <= 0.001)
		printf("0.00");
	else
		printf("%.2f", A);
	if(B >= 0)
		printf("+%.2lfi", B);
	else if(fabs(B) <= 0.001)
		printf("+0.00i");
	else
		printf("%.2lfi", B);
 
	return 0;
} 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值