package fracCalc;
import java.util.Scanner;
public class fraction {
public static void main
(String[] args
) { Scanner scanner
= new Scanner
(System.
in);
System.
out.
print("Enter a fraction: "); String input
= scanner.
nextLine();
// loop until user enters 'quit'
while (!input.equalsIgnoreCase("quit")) {
System.
out.
println(produceAnswer
(input
)); System.
out.
print("Enter a fraction: "); input = scanner.nextLine();
}
System.
out.
println("Goodbye!"); scanner.close();
}
// parse input
String t
[] = input.
split(" "); if (t.length != 3) return "Check format!";
MixedFraction a = parseFraction(t[0]);
a.check();
MixedFraction b = parseFraction(t[2]);
b.check();
MixedFraction result;
//addition
switch(operator) {
case "+":
result = a.add(b);
break;
case "-":
result = a.subtract(b);
break;
case "*":
result = a.multiply(b);
break;
case "/":
result = a.divide(b);
break;
default:
return a + " " + operator + " " + b + " = " + result;
}
}
//parse
private static MixedFraction parseFraction
(String fraction
) {
MixedFraction mf = new MixedFraction();
if (fraction.contains("_")) {
t = fraction.split("_");
mf.
number = Integer.
parseInt(t
[0]); fraction = t[1];
}
else mf.number = 0;
t = fraction.split("/");
return mf;
}
}
class MixedFraction {
public int number, num, denom;
public MixedFraction() {
number = 0;
num = 0;
denom = 0;
}
private int gcd(int a, int b) {
while (b != 0) {
int t = b;
b = a % b;
a = t;
}
return a;
}
private int lcm(int a, int b) {
return Math.
abs(a
* b
) / gcd
(a, b
); }
public void check() {
if (this.num <= this.denom) return;
this.number += this.num / this.denom;
this.num = this.num % this.denom;
}
return (number != 0 ? number + "_" : "") + num + "/" + denom;
}
//adding the fractions
public MixedFraction add(MixedFraction b) {
MixedFraction mf = new MixedFraction();
int a_num = this.num + this.number * this.denom;
int b_num = b.num + b.number * b.denom;
int lcm = lcm(this.denom, b.denom);
a_num *= lcm / this.denom;
b_num *= lcm / b.denom;
mf.num = a_num + b_num;
mf.denom = lcm;
mf.check();
return mf;
}
//multiply the fractions
public MixedFraction multiply(MixedFraction b) {
MixedFraction mf = new MixedFraction();
int a_num = this.num * this.number * this.denom;
int b_num = b.num * b.number * b.denom;
int lcm = lcm(this.denom, b.denom);
a_num *= lcm / this.denom;
b_num *= lcm / b.denom;
mf.num = a_num * b_num;
mf.denom = lcm;
mf.check();
return mf;
}
//subtract the fractions
public MixedFraction subtract(MixedFraction b) {
MixedFraction mf = new MixedFraction();
int a_num = this.num - this.number * this.denom;
int b_num = b.num - b.number - b.denom;
int lcm = lcm(this.denom, b.denom);
a_num *= lcm / this.denom;
b_num *= lcm / b.denom;
mf.num = a_num - b_num;
mf.denom = lcm;
mf.check();
return mf;
}
//divide the fractions
public MixedFraction divide(MixedFraction b) {
MixedFraction mf = new MixedFraction();
int a_num = this.num - this.number * this.denom;
int b_num = b.num / b.number / b.denom;
int lcm = lcm(this.denom, b.denom);
a_num *= lcm / this.denom;
b_num *= lcm / b.denom;
mf.num = a_num / b_num;
mf.denom = lcm;
mf.check();
return mf;
}
}