// Pre: // 1) a >= b // Constructively returns a-b Rational subtract(Rational a, Rational b) { Rational c ("0"); int i = 0; while(i < a.getLength()) { if(a.getDigit(i) >= b.getDigit(i)) c.setDigit(i,a.getDigit(i)-b.getDigit(i)); else { c.setDigit(i,a.getDigit(i)+10-b.getDigit(i)); a.setDigit(i+1,a.getDigit(i+1)-1); } i++; } while(i > 1 && c.getDigit(i-1) == 0) i--; c.setLength(i); return c; }
// Constructively returns a+b Rational add(Rational a, Rational b) { int max = ((a.getLength() > b.getLength()) ? a.getLength() : b.getLength()); int i = 0; Rational c ("0"); c.setLength(max); while(i < max) { c.setDigit(i, c.getDigit(i) + a.getDigit(i) + b.getDigit(i)); if(c.getDigit(i) > 9) { c.setDigit(i, c.getDigit(i)%10); c.setDigit(i+1, c.getDigit(i+1)+1); if(i == max-1) c.setLength(c.getLength()+1); } i++; } return c; }