版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
6-3 分数计算 (10 分)
该题目实现了分数的表示,分数的加法和乘法。该题目的输入不需要考虑输入分母为“0”。注意,例如当输入是分子是4,分母是8的时候,分数应该是1/2,而不是4/8.
方法定义:
请仔细阅读测试样例中的调用
裁判测试程序样例:
import java.util.Scanner;
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());
a.print();
b.print();
a.plus(b).print();
a.multiply(b).print();
in.close();
}
}
/* 请在这里填写答案 */
输入样例:
在这里给出一组输入。例如:
1 2 3 4
输出样例:
在这里给出相应的输出。例如:
1/2 3/4 5/4 3/8
解答
class Fraction {
private int mol;
private int den;
private int sum_mol;
private int sum_den;
private int pdt_mol;
private int pdt_den;
Fraction(int mol, int den) {
this.mol = mol;
this.den = den;
}
public void print() {
//为了约分
int flag;
do {
flag = 0;
for (int i = 2; i <= mol && i <= den; ++i) {
if (mol % i == 0 && den % i == 0) {
mol = mol / i;
den = den / i;
flag = 1;
}
}
} while (flag != 0);
System.out.print(mol + "/" + den + " ");
}
public Fraction plus(Fraction x) {
//定义新的量是防止den,mol在第一次加法计算中值发生变化,影响乘法的运算
int sumden = this.sum_den;
int summol = this.sum_mol;
int td = this.den;
int tm = this.mol;
int xd = x.den;
int xm = x.mol;
//寻找最大公倍数(分母)
sumden = td;
for (; ; sumden++) {
if (sumden % td == 0 && sumden % xd == 0) {
break;
}
}
tm *= (sumden / td);
xm *= (sumden / xd);
summol = tm + xm;
Fraction c = new Fraction(summol, sumden);
return c;
}
public Fraction multiply(Fraction y) {
int pdtden = this.pdt_den;
int pdtmol = this.pdt_mol;
int td = this.den;
int tm = this.mol;
int yd = y.den;
int ym = y.mol;
pdtden = td * yd;
pdtmol = tm * ym;
Fraction d = new Fraction(pdtmol, pdtden);
return d;
}
}