
package javacodebook.core.writtennumber;

/**
 *
 * @author Mark Donnermeyer
 */
public class RomanNumber implements WrittenNumber {
    
    private int n;
    
    public RomanNumber(int number) throws Exception {
        setNumber(number);
    }
    
    public void setNumber(int number) throws Exception {
        if ((number <0) || (number > 5000))
            throw new Exception("number out of range");
        this.n = number;
    }
    
    public String toString() {
        if (n == 0)
            return "";
        StringBuffer b = new StringBuffer("");
        while (n >= 1000) { b.append("M");  n -= 1000;}
        if (n >= 900)     { b.append("CM"); n -= 900; }
        if (n >= 500)     { b.append("D");  n -= 500; }
        if (n >= 400)     { b.append("CD"); n -= 400; }
        while (n >= 100)  { b.append("C");  n -= 100; }
        if (n >= 90)      { b.append("XC"); n -= 90; }
        if (n >= 50)      { b.append("L");  n -= 50; }
        if (n >= 40)      { b.append("XL"); n -= 40; }
        while (n >= 10)   { b.append("X");  n -= 10; }
        if (n >= 9)       { b.append("IX"); n -= 9; }
        if (n >= 5)       { b.append("V");  n -= 5; }
        if (n >= 4)       { b.append("IV"); n -= 4; }
        while (n > 0)     { b.append("I");  n -= 1; }
        return b.toString();
    }
}