1051. 复数乘法 (15)


  1. 复数乘法 (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) //等于0一律输出+0,不管是正的还是负的。
        printf("%.2lf+%.2lfi", Real3, Imag3);
    else printf("%.2lf-%.2lfi",Real3,fabs(Imag3));

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值