题目描述
本题要求编写程序,计算2个复数的和、差、积、商。
输入格式
输入在一行中按照a1 b1 a2 b2
的格式给出2个复数C1=a1+b1i
和C2=a2+b2i
的实部和虚部。题目保证C2不为0。
输出格式
分别在4行中按照(a1+b1i) 运算符 (a2+b2i) = 结果
的格式顺序输出2个复数的和、差、积、商,数字精确到小数点后1位。如果结果的实部或者虚部为0,则不输出。如果结果为0,则输出0.0。
样例
输入1:
2 3.08 -2.04 5.06
输出2:
(2.0+3.1i) + (-2.0+5.1i) = 8.1i
(2.0+3.1i) - (-2.0+5.1i) = 4.0-2.0i
(2.0+3.1i) * (-2.0+5.1i) = -19.7+3.8i
(2.0+3.1i) / (-2.0+5.1i) = 0.4-0.6i
代码
#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
struct fushu
{
double shibu;
double xubu;
fushu()
{
shibu = 0.0;
xubu = 0.0;
}
fushu(double a, double b)
{
shibu = a;
xubu = b;
}
fushu add(fushu c)
{
fushu res;
res.shibu = this -> shibu + c.shibu;
res.xubu = this -> xubu + c.xubu;
return res;
}
fushu sub(fushu c)
{
fushu res;
res.shibu = this -> shibu - c.shibu;
res.xubu = this -> xubu - c.xubu;
return res;
}
fushu mul(fushu c)
{
fushu res;
res.shibu = this -> shibu * c.shibu - this -> xubu * c.xubu;
res.xubu = this -> shibu * c.xubu + this -> xubu * c.shibu;
return res;
}
fushu div(fushu c)
{
fushu res;
fushu tmp;
tmp.shibu = c.shibu;
tmp.xubu = -c.xubu;
res = this -> mul(tmp);
double temp = c.shibu * c.shibu + c.xubu * c.xubu;
res.shibu /= temp;
res.xubu /= temp;
return res;
}
};
void print_num(fushu c)
{
double shi = 1.0 * round(c.shibu * 10) / 10;
double xu = 1.0 * round(c.xubu * 10) / 10;
if(shi == 0.0 && xu == 0.0) cout << "0.0";
else if(shi == 0.0 && xu != 0.0) printf("(0.0+%.1fi)", xu);
else if(shi != 0.0 && xu == 0.0) printf("(%.1f+0.0i)", shi);
else
{
if(xu < 0) printf("(%.1f%.1fi)", shi, xu);
else printf("(%.1f+%.1fi)", shi, xu);
}
}
void print_res(fushu c)
{
double shi = 1.0 * round(c.shibu * 10) / 10;
double xu = 1.0 * round(c.xubu * 10) / 10;
if(shi == 0.0 && xu == 0.0) cout << "0.0";
else if(shi == 0 && xu != 0) printf("%.1fi", xu);
else if(shi != 0 && xu == 0) printf("%.1f", shi);
else
{
if(xu < 0) printf("%.1f%.1fi", shi, xu);
else printf("%.1f+%.1fi", shi, xu);
}
}
int main()
{
double a1, b1, a2, b2;
cin >> a1 >> b1 >> a2 >> b2;
fushu c1(a1, b1), c2(a2, b2);
fushu res[4];
res[0] = c1.add(c2);
res[1] = c1.sub(c2);
res[2] = c1.mul(c2);
res[3] = c1.div(c2);
print_num(c1); printf(" + "); print_num(c2); printf(" = "); print_res(res[0]); printf("\n");
print_num(c1); printf(" - "); print_num(c2); printf(" = "); print_res(res[1]); printf("\n");
print_num(c1); printf(" * "); print_num(c2); printf(" = "); print_res(res[2]); printf("\n");
print_num(c1); printf(" / "); print_num(c2); printf(" = "); print_res(res[3]); printf("\n");
return 0;
}
题目类型
1.运算
2.结构体