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

【PAT Basic Level】1051 复数乘法

程序员文章站 2022-03-28 19:10:11
目录题目分析代码专栏:PAT乙级刷题笔记题目复数可以写成 (A+Bi)(A+Bi)(A+Bi) 的常规形式,其中 AAA 是实部,BBB 是虚部也可以写成极坐标下的指数形式 (R×e​Pi)(R×e​^{Pi})(R×e​Pi),其中 RRR 是复数模,PPP 是辐角,iii 是虚数单位,其等价于三角形式 R(cos(P)+isin(P))R(cos(P)+isin(P))R(cos(P)+isin(P))。现给定两个复数的 RRR 和 PPP,要求输出两数乘积的常规形式。输入格式输入在一...


专栏:PAT乙级刷题笔记

题目

复数可以写成 (A+Bi)(A+Bi) 的常规形式,其中 AA 是实部,BB 是虚部也可以写成极坐标下的指数形式 (R×ePi)(R×e​^{Pi}),其中 RR 是复数模,PP 是辐角,ii 是虚数单位,其等价于三角形式 R(cos(P)+isin(P))R(cos(P)+isin(P))
现给定两个复数的 RRPP,要求输出两数乘积的常规形式。

输入格式

输入在一行中依次给出两个复数的 R1,P1,R2,P2R_1 , P_1, R_2, P_2,数字间以空格分隔。

输出格式

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

输入样例

2.3 3.5 5.2 0.4

输出样例

-8.68-8.23i

分析

这道题真是一言难尽,通过率0.24是有道理的。
首先当实部或虚部为0的时候,居然不用考虑忽略,这真的是“常规形式”的输出吗???
其次是一个非常重要的易错点!!瞄了一眼其他人的答案才想到。
通常保留小数点后两位的方式是截断,也就是说,对于类似-0.005这样绝对值小于0.01的负数,保留两位小数后是-0.00。显然不符合要求。的确是容易忽视的错误。

代码

#include<iostream>
#include <iomanip>
#include<math.h>
using namespace std;

int main(){
	double r1,p1,r2,p2;
	cin>>r1>>p1>>r2>>p2;
	double a1 = r1*cos(p1),b1 = r1*sin(p1),
		   a2 = r2*cos(p2),b2 = r2*sin(p2),
		   a3 = a1*a2-b1*b2,b3 = b1*a2+a1*b2;
	cout.flags(ios::fixed);cout.precision(2);
    if(abs(a3) < 0.01)a3 = 0;//注意截断问题
    if(abs(b3) < 0.01)b3 = 0;
    if(b3 >= 0)
        cout<<a3<<'+'<<b3<<'i';
    else
        cout<<a3<<b3<<'i';
	return 0;
} 

本文地址:https://blog.csdn.net/qq_44574887/article/details/107129692