复数的运算(类和对象)
Time Limit: 1000 ms
Memory Limit: 65536 KiB
Problem Description
设计一个类Complex,用于封装对复数的下列操作:
成员变量:实部real,虚部image,均为整数变量;
构造方法:无参构造方法、有参构造方法(参数2个)
成员方法:含两个复数的加、减、乘操作。
复数相加举例: (1+2i)+(3+4i)= 4 + 6i
复数相减举例: (1+2i)-(3+4i)= -2 - 2i
复数相乘举例: (1+2i)*(3+4i)= -5 + 10i
要求:对复数进行连环运算。
Input
输入有多行。
第一行有两个整数,代表复数X的实部和虚部。
后续各行的第一个和第二个数表示复数Y的实部和虚部,第三个数表示操作符op: 1——复数X和Y相加;2——复数X和Y相减;3——复数X和Y相乘。
Output
计算数据输出其简化复数形式,如:-2-2i、-4、-3i、1+2i、0。
Sample Input
1 1 3 4 2 5 2 1 2 -1 3 0 2 2
Sample Output
5-7i
Hint
输入与输出形式示例:
如果输入:
2 3
-2 1 1
则输出:4i
如果输入:
1 2
-1 -2 1
则输出:0
复数的输出形式示例:
实部 虚部 输出形式
0 0 0
-4 0 -4
0 4 4i
3 2 3+2i
3 -2 3-2i
如果输入:
2 3
-2 1 1
则输出:4i
如果输入:
1 2
-1 -2 1
则输出:0
复数的输出形式示例:
实部 虚部 输出形式
0 0 0
-4 0 -4
0 4 4i
3 2 3+2i
3 -2 3-2i
Code
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Complex x = new Complex(sc.nextInt(), sc.nextInt());
while (sc.hasNext()) {
Complex y = new Complex(sc.nextInt(), sc.nextInt());
int op = sc.nextInt();
if (op == 1) {
x = x.add(y);
} else if (op == 2) {
x = x.sub(y);
} else if (op == 3) {
x = x.multi(y);
}
}
System.out.println(x);
sc.close();
}
}
class Complex {
int real;
int imag;
public Complex(int real, int imag) {
super();
this.real = real;
this.imag = imag;
}
public Complex add(Complex c2) {
real += c2.real;
imag += c2.imag;
return new Complex(real, imag);
}
public Complex sub(Complex c2) {
real -= c2.real;
imag -= c2.imag;
return new Complex(real, imag);
}
public Complex multi(Complex c2) {
int real_t = real;
real = real * c2.real - imag * c2.imag;
imag = imag * c2.real + real_t * c2.imag;
return new Complex(real, imag);
}
@Override
public String toString() {
if (real != 0 && imag == 1) {
return real + "+i";
} else if (real != 0 && imag == -1) {
return real + "-i";
} else if (real != 0 && imag > 0) {
return real + "+" + imag + "i";
} else if (real != 0 && imag < 0) {
return real + "" + imag + "i";
} else if (real == 0 && imag == 1) {
return "i";
} else if (real == 0 && imag == -1) {
return "-i";
} else if (real == 0 && imag != 0) {
return imag + "i";
} else if (real != 0 && imag == 0) {
return real + "";
} else if (real == 0 && imag == 0) {
return "0";
}
return null;
}
}
反思:
Java类的练习,输出格式很坑,Output Limit Exceed无数次,发现是没判-1的情况……