Skip to content

Instantly share code, notes, and snippets.

@betandr
Created January 30, 2015 09:54
Show Gist options
  • Save betandr/ea95ffb291d761704483 to your computer and use it in GitHub Desktop.
Save betandr/ea95ffb291d761704483 to your computer and use it in GitHub Desktop.
Rational v1
class Rational(n: Int, d: Int) {
require(d!= 0)
private val g = gcd(n.abs, d.abs)
val numer = n / g
val denom = d / g
def this(n: Int) = this(n, 1)
def + (that: Rational): Rational = {
new Rational(
numer * that.denom + that.numer * denom,
denom * that.denom
)
}
def + (i: Int): Rational = {
new Rational(numer + i * denom, denom)
}
def - (that: Rational) = {
new Rational(
numer * that.denom - that.numer * denom,
denom * that.denom
)
}
def - (i: Int): Rational = {
new Rational(numer - i * denom, denom)
}
def * (that: Rational): Rational = {
new Rational(
numer * that.numer,
denom * that.denom
)
}
def * (i: Int):Rational = {
new Rational(numer * i, denom)
}
def / (that: Rational):Rational = {
new Rational(
numer * that.denom,
denom * that.numer
)
}
def / (i: Int):Rational = {
new Rational(numer, denom * i)
}
override def toString = numer + "/" + denom
private def gcd(a: Int, b: Int): Int = {
if (b == 0) a else gcd(b, a % b)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment