由于pta上的main方法有更新,前面发的代码不能用了,现已更新如下
设计一个分数类,完成相加和相乘及判相等的方法。 以下是分数测试主类,请不要修改main方法也不要在主类中添加其他方法。你只需要复制主类代码并补充其他类的定义,使其通过主类的测试。详见main方法代码及注释。
输入格式:
有n组测试用例。 每组测试用例从标准输入读取一行四个整数到 n1,d1,n2,d2,分别表示两个分数的分子和分母。 -1000<=n1,n2,d1,d2<=1000 && d1,d2 !=0
输出格式:
对每一组输入,在一行中输出两个分数相加、相乘及判断是否相等。 请参考main方法代码及样例输出。 相加、相乘的结果要约分。
输入样例:
在这里给出一组输入。例如:
1 2 3 4
2 4 4 8
输出样例:
在这里给出相应的输出。例如:
(1/2) + (3/4)=(5/4) (1/2) x (3/4)=(3/8) (1/2) == (3/4): false
(2/4) + (4/8)=(1) (2/4) x (4/8)=(1/4) (2/4) == (4/8): true
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n1 = sc.nextInt();
int d1 = sc.nextInt();
int n2 = sc.nextInt();
int d2 = sc.nextInt();
Fraction f1 = new Fraction(n1, d1);
Fraction f2 = new Fraction(n2, d2);
System.out.printf("%1$s + %2$s=%3$s\t", f1, f2, f1.fAdd(f2));
System.out.printf("%1$s x %2$s=%3$s\t", f1, f2, f1.fMultiply(f2));
System.out.printf("%1$s == %2$s:%3$6b\n", f1, f2, f1.equals(f2));
}
}
}
class Fraction{
private int n;
private int d;
public Fraction() {
}
public Fraction(int n, int d) {
this.n = n;
this.d = d;
}
private int Max(int a, int b){
int temp;
if(a < b){
temp = a;
a = b;
b = temp;
}
while(b!=0){
temp = b;
b = a%b;
a = temp;
}
return a;
}
public Object fAdd(Fraction f2) {
Fraction f3 = new Fraction();
f3.d = this.d * f2.d;
f3.d = f3.d/Max(this.d, f2.d);
f3.n = this.n * (f3.d/this.d) + f2.n*(f3.d/f2.d);
int a = Max(f3.n, f3.d);
if (f3.d < 0 && f3.d != -1 ){
f3.d = -f3.d;
f3.n = -f3.n;
}
f3.n = f3.n/a;
f3.d = f3.d/a;
return f3;
}
public Object fMultiply (Fraction f2) {
Fraction f3 = new Fraction();
f3.n = this.n * f2.n;
f3.d = this.d * f2.d;
int a = Max(f3.n, f3.d);
f3.n = f3.n/a;
f3.d = f3.d/a;
if (f3.d < 0){
f3.d = -f3.d;
f3.n = -f3.n;
}
return f3;
}
@Override
public String toString() {
if (d < 0) {
d = -d;
n = -n;
}
if(d==1&&n!=0){
return "("+n+")";
}else if(n==d&&n!=0){
return "(1)";
} else if(n == 0){
return "(0)";
}else {
return "(" +
n +
"/" + d +
')';
}
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Fraction f3 = (Fraction) o;
int a = Max(f3.n, f3.d);
int n1 = f3.n;int d1 =f3.d;
n1 = f3.n/a;
d1 = f3.d/a;
int b = Max(n, d);
int n2 = n;int d2 = d;
n2 = n/b;
d2 = d/b;
return n2 == n1 &&
d2 == d1;
}
}