Number names: Difference between revisions
Content added Content deleted
(→{{header|Vlang}}: Rename "Vlang" in "V (Vlang)") |
(Add Ecstasy example) |
||
Line 2,022: | Line 2,022: | ||
Readln; |
Readln; |
||
end.</syntaxhighlight> |
end.</syntaxhighlight> |
||
=={{header|Ecstasy}}== |
|||
<syntaxhighlight lang="java"> |
|||
module NumberNames |
|||
{ |
|||
void run() |
|||
{ |
|||
@Inject Console console; |
|||
Int[] tests = [0, 1, -1, 11, -17, 42, 99, 100, 101, -111, 1000, 1234, 10000, 100000, |
|||
123456789000, 0x123456789ABCDEF]; |
|||
for (Int test : tests) |
|||
{ |
|||
console.println($"{test} = {toEnglish(test)}"); |
|||
} |
|||
} |
|||
static String[] digits = ["zero", "one", "two", "three", "four", |
|||
"five", "six", "seven", "eight", "nine"]; |
|||
static String[] teens = ["ten", "eleven", "twelve", "thirteen", "fourteen", |
|||
"fifteen", "sixteen", "seventeen", "eighteen", "nineteen"]; |
|||
static String[] tens = ["zero", "ten", "twenty", "thirty", "forty", |
|||
"fifty", "sixty", "seventy", "eighty", "ninety"]; |
|||
static String[] ten3rd = ["?", "thousand", "million", "billion", "trillion", |
|||
"quadrillion", "quintillion"]; |
|||
static String toEnglish(Int n) |
|||
{ |
|||
StringBuffer buf = new StringBuffer(); |
|||
if (n < 0) |
|||
{ |
|||
"negative ".appendTo(buf); |
|||
n = -n; |
|||
} |
|||
format3digits(n, buf); |
|||
return buf.toString(); |
|||
} |
|||
static void format3digits(Int n, StringBuffer buf, Int nested=0) |
|||
{ |
|||
(Int left, Int right) = n /% 1000; |
|||
if (left != 0) |
|||
{ |
|||
format3digits(left, buf, nested+1); |
|||
} |
|||
if (right != 0 || (left == 0 && nested==0)) |
|||
{ |
|||
if (right >= 100) |
|||
{ |
|||
(left, right) = (right /% 100); |
|||
digits[left].appendTo(buf); |
|||
" hundred ".appendTo(buf); |
|||
if (right != 0) |
|||
{ |
|||
format2digits(right, buf); |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
format2digits(right, buf); |
|||
} |
|||
if (nested > 0) |
|||
{ |
|||
ten3rd[nested].appendTo(buf).add(' '); |
|||
} |
|||
} |
|||
} |
|||
static void format2digits(Int n, StringBuffer buf) |
|||
{ |
|||
switch (n) |
|||
{ |
|||
case 0..9: |
|||
digits[n].appendTo(buf).add(' '); |
|||
break; |
|||
case 10..19: |
|||
teens[n-10].appendTo(buf).add(' '); |
|||
break; |
|||
default: |
|||
(Int left, Int right) = n /% 10; |
|||
tens[left].appendTo(buf); |
|||
if (right == 0) |
|||
{ |
|||
buf.add(' '); |
|||
} |
|||
else |
|||
{ |
|||
buf.add('-'); |
|||
digits[right].appendTo(buf).add(' '); |
|||
} |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
</syntaxhighlight> |
|||
Output: |
|||
<syntaxhighlight> |
|||
0 = zero |
|||
1 = one |
|||
-1 = negative one |
|||
11 = eleven |
|||
-17 = negative seventeen |
|||
42 = forty-two |
|||
99 = ninety-nine |
|||
100 = one hundred |
|||
101 = one hundred one |
|||
-111 = negative one hundred eleven |
|||
1000 = one thousand |
|||
1234 = one thousand two hundred thirty-four |
|||
10000 = ten thousand |
|||
100000 = one hundred thousand |
|||
123456789000 = one hundred twenty-three billion four hundred fifty-six million seven hundred eighty-nine thousand |
|||
81985529216486895 = eighty-one quadrillion nine hundred eighty-five trillion five hundred twenty-nine billion two hundred sixteen million four hundred eighty-six thousand eight hundred ninety-five |
|||
</syntaxhighlight> |
|||
=={{header|Elixir}}== |
=={{header|Elixir}}== |