PTA刷题Basic篇——1051.复数乘法——Day(26)

问题描述

在这里插入图片描述分别给定两个复数的复数模和辐角,然后通过给定的公式表示两个复数的标准形式。用这两个标准形式的复数做乘法,将得到的结果输出。

题目分析

题目比较简单,我们先根据输入的复数模和辐角利用公式计算出两个标准形式,将标准形式的复数相乘。
假设第一个复数的实部为complex_r1,虚部为cimplex_p1;第二个复数的实部为complex_r2,虚部为complex_p2。则相乘结果的实部为:complex_r1 x complex_r2 - complex_p1 x complex_p2
虚部为:complex_r1 x complex_p2 + complex_r2 x complex_p1。
计算出实部与虚部之后我们就开始输出了,输出的时候有几个细节需要注意:
1.如果实部或者虚部为负数,则我们输出一个’-’,将负数化位正数输出
2.如果实部或者虚部<0.01,我们就将这其变为0,因为保留两位小数结果也会是0,但是如果这个数字是负数,比如0.006,则它的输出一定是-0.00(保留两位小数结也是0.00),这显然不合理,所以我们要把绝对值小于0.01的数做一下归0处理,不影响结果

代码

#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
int main()
{
    long double r1,p1,r2,p2;
    cin>>r1>>p1>>r2>>p2;
    long double complex_r1,complex_r2,complex_p1,complex_p2;
    complex_r1 = r1 * (cos(p1));
    complex_p1 = r1 * (sin(p1));
    complex_r2 = r2 * (cos(p2));
    complex_p2 = r2 * (sin(p2));
    long double res_r,res_p;
    res_r = complex_r1 * complex_r2 - complex_p1 * complex_p2;
    res_p = complex_r1 * complex_p2 + complex_r2 * complex_p1;
    //如果这里的值太小的话,会导致我们保留后两位之后答案是0.00
    //但是这个数字的本质有可能仍然是负数,输出的时候有可能就会出现-0.00的现象
    if(fabs(res_r) < 0.01)
        res_r = 0;
    if(fabs(res_p) < 0.01)
        res_p = 0;
    if(res_r < 0)
        cout<<'-'<<setiosflags(ios::fixed)<<setprecision(2)<<-res_r;
    else
    {
        cout<<setiosflags(ios::fixed)<<setprecision(2)<<res_r;
    }
    if (res_p < 0)
    {
        cout<<'-'<<setiosflags(ios::fixed)<<setprecision(2)<<-res_p<<'i';
    }
    else
        cout<<'+'<<setiosflags(ios::fixed)<<setprecision(2)<<res_p<<'i';
    return 0;
}

答题用时14min
Q51——finish√

原创文章 101 获赞 13 访问量 2303

猜你喜欢

转载自blog.csdn.net/weixin_44755413/article/details/105904661
今日推荐