Number names
Appearance
ALGOL 68
PROC number words =
( INT n ) STRING : # returns a string representation of n in words. Currently deals with anything from 0 to 999 999 999. # BEGIN [] STRING digits = [] STRING ( "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" )[@0]; [] STRING teens = [] STRING ( "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" )[@0]; [] STRING decades = [] STRING ( "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" )[@2];
PROC three digits = ( INT n ) STRING : # does the conversion for n from 0 to 999. # BEGIN INT tens = n MOD 100 OVER 10; INT units = n MOD 10; IF n >= 100 THEN digits[n OVER 100] + " " + "hundred" + IF n MOD 100 /= 0 THEN " and " ELSE "" FI ELSE "" FI + IF tens /= 0 THEN IF tens = 1 THEN teens[units] ELSE decades[tens] + IF units /= 0 THEN "-" ELSE "" FI FI FI + IF units /= 0 AND tens /= 1 OR n = 0 THEN digits[units] ELSE "" FI END; INT n3 = n OVER 1 000 000; INT n2 = n MOD 1 000 000 OVER 1000; INT n1 = n MOD 1000; IF n3 /= 0 THEN three digits(n3) + " million" ELSE "" FI + IF n3 /= 0 AND (n2 /= 0 OR n1 >= 100) THEN ", " ELSE "" FI + IF n2 /= 0 THEN three digits(n2) + " thousand" ELSE "" FI + IF (n3 /= 0 OR n2 /= 0) AND n1 > 0 AND n1 < 100 THEN " and " ELIF n2 /= 0 AND n1 /= 0 THEN ", " ELSE "" FI + IF n1 /= 0 OR n = 0 THEN three digits(n1) ELSE "" FI END;
DO # until user hits EOF #
on logical file end(standin, (REF FILE f) BOOL : GOTO finish); on value error(standin, (REF FILE f) BOOL : GOTO finish); INT n; print("n? "); read((n, new line)); print((number words(n), new line))
OD; finish: SKIP