import java.math.BigInteger; public class BigFraction { private final BigInteger num; private final BigInteger denom; public BigFraction(BigInteger num, BigInteger denom) { if(denom.compareTo(BigInteger.ZERO) < 0) { num = num.negate(); denom = denom.negate(); } BigInteger d = num.gcd(denom); num = num.divide(d); denom = denom.divide(d); this.num = num; this.denom = denom; } /** * This static factory method produces a BigFraction * with specified numerator and denominator * @param num the numerator * @param denom the denominator * @return the BigFraction num/denom */ public static BigFraction valueOf(long num, long denom) { return new BigFraction(BigInteger.valueOf(num), BigInteger.valueOf(denom)); } @Override public String toString() { return String.format("%s/%s", num, denom); } public static void main(String[] args) { BigFraction f = BigFraction.valueOf(2,4); System.out.println(f); BigFraction g = BigFraction.valueOf(-2, -4); System.out.println(g); } }