java实现2_3|8类型的假分数的加减乘除运算
时间: 2024-05-15 08:19:43 浏览: 7
以下是Java实现2_3|8类型的假分数的加减乘除运算的示例代码:
```
public class Fraction {
private int integer; // 整数部分
private int numerator; // 分子
private int denominator; // 分母
// 构造方法
public Fraction(int integer, int numerator, int denominator) {
this.integer = integer;
this.numerator = numerator;
this.denominator = denominator;
}
// 加法
public Fraction add(Fraction fraction) {
int lcm = getLCM(this.denominator, fraction.denominator); // 最小公倍数
int numerator1 = this.numerator * (lcm / this.denominator);
int numerator2 = fraction.numerator * (lcm / fraction.denominator);
int numerator = numerator1 + numerator2;
int integer = 0;
if (numerator >= lcm) { // 转换为带分数
integer = numerator / lcm;
numerator %= lcm;
}
int gcd = getGCD(numerator, lcm); // 最大公约数
numerator /= gcd;
lcm /= gcd;
return new Fraction(this.integer + fraction.integer + integer, numerator, lcm);
}
// 减法
public Fraction subtract(Fraction fraction) {
int lcm = getLCM(this.denominator, fraction.denominator); // 最小公倍数
int numerator1 = this.numerator * (lcm / this.denominator);
int numerator2 = fraction.numerator * (lcm / fraction.denominator);
int numerator = numerator1 - numerator2;
int integer = 0;
if (numerator < 0) { // 转换为带分数
integer = -1;
numerator = lcm - Math.abs(numerator);
}
if (numerator >= lcm) { // 转换为带分数
integer += numerator / lcm;
numerator %= lcm;
}
int gcd = getGCD(numerator, lcm); // 最大公约数
numerator /= gcd;
lcm /= gcd;
return new Fraction(this.integer - fraction.integer + integer, numerator, lcm);
}
// 乘法
public Fraction multiply(Fraction fraction) {
int numerator = this.numerator * fraction.numerator;
int denominator = this.denominator * fraction.denominator;
int integer = 0;
if (numerator >= denominator) { // 转换为带分数
integer = numerator / denominator;
numerator %= denominator;
}
int gcd = getGCD(numerator, denominator); // 最大公约数
numerator /= gcd;
denominator /= gcd;
return new Fraction((this.integer + integer) * fraction.integer, numerator, denominator);
}
// 除法
public Fraction divide(Fraction fraction) {
int numerator = this.numerator * fraction.denominator;
int denominator = this.denominator * fraction.numerator;
int integer = 0;
if (numerator >= denominator) { // 转换为带分数
integer = numerator / denominator;
numerator %= denominator;
}
int gcd = getGCD(numerator, denominator); // 最大公约数
numerator /= gcd;
denominator /= gcd;
return new Fraction((this.integer + integer) / fraction.integer, numerator, denominator);
}
// 获取最小公倍数
private int getLCM(int a, int b) {
return a * b / getGCD(a, b);
}
// 获取最大公约数
private int getGCD(int a, int b) {
if (b == 0) {
return a;
} else {
return getGCD(b, a % b);
}
}
// toString方法
public String toString() {
if (numerator == 0) {
return String.valueOf(integer);
} else if (integer == 0) {
return numerator + "|" + denominator;
} else {
return integer + "_" + numerator + "|" + denominator;
}
}
}
```
使用示例:
```
Fraction f1 = new Fraction(2, 1, 2); // 2_1|2
Fraction f2 = new Fraction(3, 3, 8); // 3_3|8
Fraction result = f1.add(f2);
System.out.println(f1 + " + " + f2 + " = " + result); // 2_1|2 + 3_3|8 = 6_5|8
result = f1.subtract(f2);
System.out.println(f1 + " - " + f2 + " = " + result); // 2_1|2 - 3_3|8 = -1_3|8
result = f1.multiply(f2);
System.out.println(f1 + " * " + f2 + " = " + result); // 2_1|2 * 3_3|8 = 7_3|4
result = f1.divide(f2);
System.out.println(f1 + " / " + f2 + " = " + result); // 2_1|2 / 3_3|8 = 1_5|6
```