zoukankan      html  css  js  c++  java
  • B1051 复数乘法

    复数可以写成 ( 的常规形式,其中 A 是实部,B 是虚部,i 是虚数单位,满足 1;也可以写成极坐标下的指数形式 (,其中 R 是复数模,P 是辐角,i 是虚数单位,其等价于三角形式 (。

    现给定两个复数的 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


    最终AC的代码如下:
    #include <iostream>
    #include <cmath>
    using namespace std;
    
    struct Fnum{
        double a; //实数部分
        double b; //虚数部分
        Fnum(){
            a = 0;
            b = 0;
        }
        
    };
    
    Fnum getFnum(double r, double p){
        Fnum n;
        n.a = r * cos(p);
        n.b = r * sin(p);
        return n;
    }
    
    int main(){
        double r1, p1, r2, p2;
        Fnum A, B, ans;
        scanf("%lf %lf %lf %lf", &r1, &p1, &r2, &p2);
        A = getFnum(r1, p1);
        B = getFnum(r2, p2);
        ans.a = A.a * B.a - (A.b * B.b);
        ans.b = A.a * B.b + A.b * B.a;
        if(fabs(ans.a)<0.01){
            ans.a = 0.00;
        }
        if(fabs(ans.b)<0.01){
            ans.b = 0.00;
        }
        if(ans.b<0){
            printf("%.2f%.2fi
    ", ans.a, ans.b);
        }else{
            printf("%.2f+%.2fi
    ", ans.a, ans.b);
        }
        return 0;
    }
    当然了,第一次写的时候,并没有AC,只通过了第一个测试用例。之后看了一位大佬的博客(链接:https://www.jianshu.com/p/9d0b6f9638b3),才发现了两个坑点。

    坑点一:题目要求只输出两位小数,因此绝对值<0.01的数都用0.00代替。
    坑点二:当虚数部分(即B)为正数时,前面应该有一个 '+' 号。
  • 相关阅读:
    力扣238.除自身以外数组的乘积 & 剑指offer 51.构建乘积数组
    网易的Airtest
    ZOOKEEPER
    Apache和Nginx负载均衡集群及测试分析
    mysql——创建索引、修改索引、删除索引的命令语句
    sql-索引的作用
    ADB连接手机的两种方式(usb数据线连接和wifi连接)
    adb shell dumpsys 命令
    count(*) 和 count(1)和count(列名)区别
    博客园页面设置
  • 原文地址:https://www.cnblogs.com/heyour/p/12231012.html
Copyright © 2011-2022 走看看