题目
设计一个表示分数的类 Fraction。这个类用两个 int 类型的变量分别表示分子和分母。注意,在创建和做完运算后应该化简分数为最简形式。如 2/4 应该被化简为 1/2。
函数接口定义:
这个类的构造函数是:
Fraction(int a, int b)
构造一个 a/b 的分数。
这个类要提供以下的功能:
double toDouble();
将分数转换为 double
Fraction plus(Fraction r);
将自己的分数和 r 的分数相加,产生一个新的 Fraction 的对象。
Fraction multiply(Fraction r);
将自己的分数和 r 的分数相乘,产生一个新的 Fraction 的对象。
String toString();
将自己以“分子/分母”的形式产生一个字符串。如果分数是 1/1,应该输出"1"
。当分子大于分母时,不需要提出整数部分,即"31/30"
是一个正确的输出。
裁判测试程序样例:
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Fraction a = new Fraction(in.nextInt(), in.nextInt());
Fraction b = new Fraction(in.nextInt(), in.nextInt());
System.out.println(a);
System.out.println(b);
System.out.println(a.plus(b));
System.out.println(a.multiply(b).plus(new Fraction(5,6)));
System.out.println(a);
System.out.println(b);
System.out.println(a.toDouble());
in.close();
}
}
/* 请在这里填写答案 */
注意,你的类的定义应该这样开始:
class Fraction {
也就是说,在你的类的 class 前面不要有 public。
输入样例:
2 4 1 3
输出样例:
1/2
1/3
5/6
1
1/2
1/3
0.5
解答
/**
* Created by IntelliJ IDEA.
*
* @author Long Yan
* @version 2022/9/6
*/
class Fraction {
int a, b;
public Fraction(int a, int b) {
this.a = a;
this.b = b;
}
@Override
public String toString() {
int temp = gcd(this.a, this.b);
this.a /= temp;
this.b /= temp;
if (this.a == this.b) return "1";
else if (this.a < 0 && this.b > 0) return "-" + (-1) * this.a + "/" + this.b;
else if (this.a > 0 && this.b < 0) return "-" + this.a + "/" + (-1) * this.b;
return this.a + "/" + this.b;
}
int gcd(int a, int b) {
return a % b == 0 ? b : gcd(b, a % b);
}
double toDouble() {
return 1.0 * a / b;
}
Fraction plus(Fraction r) {
Fraction m = new Fraction(0, 0);
m.a = r.a * b + a * r.b;
m.b = r.b * b;
return m;
}
Fraction multiply(Fraction r) {
Fraction m = new Fraction(0, 0);
m.a = r.a * a;
m.b = r.b * b;
return m;
}
}
标签:分数,return,W1,int,System,2022JAVA,Fraction,println,NIT
From: https://www.cnblogs.com/bellongyan/p/NIT-2022JAVA_W1-6-1.html