- 复数乘法 (15)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
复数可以写成(A + Bi)的常规形式,其中A是实部,B是虚部,i是虚数单位,满足i2 = -1;也可以写成极坐标下的指数形式(R*e(Pi)),其中R是复数模,P是辐角,i是虚数单位,其等价于三角形式 R(cos(P) + isin(P))。
现给定两个复数的R和P,要求输出两数乘积的常规形式。
输入格式:
输入在一行中依次给出两个复数的R1, P1, R2, P2,数字间以空格分隔。
输出格式:
在一行中按照“A+Bi”的格式输出两数乘积的常规形式,实部和虚部均保留2位小数。注意:如果B是负数,则应该写成“A-|B|i”的形式。
输入样例:
2.3 3.5 5.2 0.4
输出样例:
-8.68-8.23i
解题思路
1.注意题目要求只保留两位小数,那么就有可能出现极限值的问题(具体是为什么我还没搞清,知道的大神求留言我,跪谢),也就是当值在正负0.01这个范围时应该是等于0的。
2.当虚部等于0的时候不管是+0还是-0都输出+0
3.题目要我们注意“注意:如果B是负数,则应该写成“A-|B|i”的形式。 ”不是让我们在输出的时候加上绝对值符号‘|’。
#include<iostream>
#include<math.h>
using namespace std;
int main() {
double R1, P1, R2, P2;
double Real1, Imag1;
double Real2, Imag2;
double Real3, Imag3;
cin >> R1 >> P1 >> R2 >> P2;
Real1 = R1 * cos(P1);
Imag1 = R1 * sin(P1);
Real2 = R2 * cos(P2);
Imag2 = R2 * sin(P2);
Real3 = Real1 * Real2 + Imag1 * Imag2 * -1;
Imag3 = Real1 * Imag2 + Real2 * Imag1;
if (fabs(Real3) < 0.01) Real3 = 0;
if (fabs(Imag3) < 0.01) Imag3 = 0;
if (Imag3 >= 0.0)
printf("%.2lf+%.2lfi", Real3, Imag3);
else printf("%.2lf-%.2lfi",Real3,fabs(Imag3));
}