题目链接: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;
}