Skip to content

11639: 【原1639】求复数的加法和乘法

题目

题目描述

author: Online Judge 原OJ链接:https://acm.sjtu.edu.cn/OnlineJudge-old/problem/1639

Description

定义一个复数类,而复数的虚部和实部都用有理数表示。需要实现的功能包括重载>>,<<,+,*四个操作符,同时为其定义构造函数。

要求复数类里面有两个对象成员,分别为复数的实部和虚部。回忆每个对象成员为有理数类的对象,提示有理数类里面有两个成员变量, 分别是分子和分母。如果输入的分子分母有公约数,要进行处理。如2/4应该写成1/2;30/40应该写成3/4。请大家务必定义一个 类并重载四个操作符,利用重载的操作符完成编程。 我们会随机抽查30位同学检查,如果没有使用的话不计分数哦。

成员函数/友元需要包括下面的函数:

friend Complex operator+(const Complex &x, const Complex &y);
friend istream& operator>>(istream &is, Complex &obj);
friend ostream& operator<<(ostream &os, const Complex &obj);
friend Complex operator*(const Complex &x, const Complex &y);
Complex(int r1=0, int r2=1, int i1=0, int i2=1)...{}

注意:

  • 请大家注意,如果实部或者虚部为负有理数,请在分子部分取负。例如-11/40。
  • 如果两个相同的有理数相减,输出的有理数为0/1。
  • 请注意所有的实部和虚部都需要用分数的形式输出,例如如果结果是20,请输出20/1。
  • 请大家注意构造函数的定义省略了重要内容,注意完成补全'...'部分的内容。
  • 请大家不必担心溢出的问题。

描述:

请输入四行。有两个复数a,b,前两行分别为a的实部和虚部,而后两行分别为b的实部和虚部。 输出两行。第一行是复数a和b相加的结果,记为c;第二行是c和a相乘的结果。输出形式见样例。

Sample Input 1

5 8
2 20
4 8
3 20

Sample Output 1

(5/8 + 1/10i) + (1/2 + 3/20i) = (9/8 + 1/4i)
(9/8 + 1/4i) * (5/8 + 1/10i) = (217/320 + 43/160i)

Sample Input 2

1 4
2 5
1 4
3 5

Sample Output 2

(1/4 + 2/5i) + (1/4 + 3/5i) = (1/2 + 1/1i)
(1/2 + 1/1i) * (1/4 + 2/5i) = (-11/40 + 9/20i)

Oops! 本题目还没有解答!

助教老师们编题的速度,已经超过了解题的速度!

OJ翻了一新,但本解答集还大多用的是2017-2019级,甚至更早的同学们贡献的答案。

如果你已经AC了,可以的话,请您参考添加页面,与大家一起分享你的题解!