Subtraction of Fractions
by Isai Damier

/***************************************************************************
 *  Author: Isai Damier
 * Title: Subtraction of Fractions
 * Project: geekviewpoint
 * Package: algorithms
 *
 * Statement:
 *   Subtract the two given positive fractions
 *
 * Sample Input: {5,6}, {7,8})
 * Sample Output: {-1,24}
 *
 * Technical Details:
 *   This is the same algorithm you learned in grade school:
 *   1) find the lowest common denominator, which is the same as finding
 *     the lowest common multiplier of the given denominators.
 *   2) Convert the given fractions into equivalent fractions with the
 *     new denominator
 *   3) subtract the numerators
 *   4) reduce the resulting fraction using the GCD (greatest common
 *     divisor) of its numerator and denominator.
 *
 **************************************************************************/ 
 public int[] fractionSubtraction(int[] a, int[] b) {
  int denominator = LCM(a[1], b[1]);
  int numA = denominator / a[1] * a[0];
  int numB = denominator / b[1] * b[0];
  int numerator = numA - numB;
  int gcd = GCD(0 > numerator? -numerator:numerator, denominator);
  gcd = 0 > gcd ? -gcd : gcd;
  return new int[]{numerator / gcd, denominator / gcd};
}
import org.junit.Test;
import static org.junit.Assert.*;

public class NumbersTest {

  /**
   * Test of fractionSubtraction method, of class Numbers.
   */
  @Test
  public void testFractionSubtraction() {
    System.out.println("fractionSubtraction");
    Numbers numbers = new Numbers();
    int[] expResult = {-1,24};
    int[] result = numbers.fractionSubtraction(new int[] {5,6}, new int[] {7,8});
    assertArrayEquals(expResult, result);
    result = numbers.fractionSubtraction(new int[] {5,6}, new int[] {6,8});
    assertArrayEquals(new int[] {1,12}, result);
  }
}