/** Contains Anglize functions */
public class Ang {
    
    /** = the anglicization of n.
      *   Precondition: n in 1..999,999 */
    public static String ang(int n) {
        if (n <= 19)
            return ang19(n);
        
        // 20 <= n < 1,000,000
        if (n < 100) {
            return tensWord(n/10)  + 
                (n%10 == 0 ? "" : " " + ang19(n%10));
        }
       
        // 100 <= n < 1,000,000
        if (n < 1000) {
            return ang19(n/100) + " hundred" + 
                (n%100 == 0 ? ""  : " " + ang(n%100));
        }
        
        // 1000 <= n < 1,000,000
        return ang(n/1000) + " thousand" + 
            (n%1000 == 0 ? ""  : " " + ang(n%1000)); 
    }
    
    /** = the tens-word for n.
          e.g. tensword for 2 is twenty.
          Precondition: n in 2..9 */
    private static String tensWord(int n) {
        if (n == 2) return "twenty";
        if (n == 3) return "thirty";
        if (n == 4) return "forty";
        if (n == 5) return "fifty";
        if (n == 6) return "sixty";
        if (n == 7) return "seventy";
        if (n == 8) return "eighty";
        return "ninety";
    }
    
    /** = the anglicization of n.
      *   Precondition: n in 1..19 */
    private static String ang19(int n) {
        if (n == 1) return "one";
        if (n == 2) return "two";
        if (n == 3) return "three";
        if (n == 4) return "four";
        if (n == 5) return "five";
        if (n == 6) return "six";
        if (n == 7) return "seven";
        if (n == 8) return "eight";
        if (n == 9) return "nine";
        if (n == 10) return "ten";
        if (n == 11) return "eleven";
        if (n == 12) return "twelve";
        if (n == 13) return "thirteen";
        if (n == 14) return "fourteen";
        if (n == 15) return "fifteen";
        if (n == 16) return "sixteen";
        if (n == 17) return "seventeen";
        if (n == 18) return "eighteen";
        return "nineteen";
    }
}