7-36 复数四则运算

题目链接:7-36 复数四则运算

一. 题目

1. 题目

在这里插入图片描述

2. 输入输出样例

在这里插入图片描述

3. 限制

在这里插入图片描述

二、代码

1. 代码实现

#include <iostream>
using namespace std;

class ImaginaryNumber {
private:
    float a; // a对应实部
    float b; // b对应虚部
public:
    ImaginaryNumber() { // 构造函数
        a = b = 0;
    }
    ImaginaryNumber(float a, float b) { // 带参数的构造函数
        this->a = a;
        this->b = b;
    }
    void Print() { // 打印复数
        printf("(%.1f%+.1fi)", a, b);
    }
    void Print2() { // 打印结果
        int a_temp(a * 20), b_temp(b * 20); // 乘20为了四舍五入
        if (a_temp % 2 != 0) {
            a_temp += a_temp % 2; // 不直接加1是因为符号
        }
        if (b_temp % 2 != 0) {
            b_temp += b_temp % 2;
        }
        a = a_temp / 20.0; // 除掉乘的20,精确度处理完成
        b = b_temp / 20.0;
        if (a != 0.0) {
            printf("%.1f", a);
            if (b != 0.0) {
                printf("%+.1fi", b); // 实部存在时,打印虚部要带符号
            }
        } else if (b != 0.0) {
            printf("%.1fi", b);
        } else{
            printf("0.0");
        }
    }
    ImaginaryNumber operator+(ImaginaryNumber y) { // 复数加法
        return ImaginaryNumber(a + y.a, b + y.b);
    }
    ImaginaryNumber operator-(ImaginaryNumber y) { // 复数减法
        return ImaginaryNumber(a - y.a, b - y.b);
    }
    ImaginaryNumber operator*(ImaginaryNumber y) { // 复数乘法
        return ImaginaryNumber(a * y.a - b * y.b, b * y.a + a * y.b);
    }
    ImaginaryNumber operator/(ImaginaryNumber y) { // 复数除法
        ImaginaryNumber x_temp((*this) * ImaginaryNumber(y.a, -y.b));
        float  y_temp = y.a * y.a + y.b * y.b;
        return ImaginaryNumber(x_temp.a / y_temp, x_temp.b / y_temp);
    }
};

void calc(ImaginaryNumber x, ImaginaryNumber y, char op) {
    x.Print(); // 打印左操作数
    printf(" %c ", op); // 打印运算符
    y.Print(); // 打印右操作数
    cout << " = ";
    switch (op) { // 计算并打印结果
        case '+':
            (x+y).Print2();
            break;
        case '-':
            (x-y).Print2();
            break;
        case '*':
            (x*y).Print2();
            break;
        case '/':
            (x/y).Print2();
            break;
    }
    cout << endl;
}

int main(void) {
    float a1, a2, b1, b2;
    cin >> a1 >> b1 >> a2 >> b2;
    ImaginaryNumber x(a1, b1), y(a2, b2);
    // 依次进行加减乘除
    calc(x, y, '+');
    calc(x, y, '-');
    calc(x, y, '*');
    calc(x, y, '/');
    return 0;
}

2. 提交结果

在这里插入图片描述

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值