Ejemplo n.º 1
0
// 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;
}
Ejemplo n.º 2
0
// 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;
}