RosettaCodeData/Task/Number-names/Euphoria/number-names.euphoria
Ingy döt Net b83f433714 tasks a-s
2013-04-10 23:57:08 -07:00

72 lines
1.7 KiB
Text

function abs(atom i)
if i < 0 then
return -i
else
return i
end if
end function
constant small = {"one", "two", "three", "four", "five", "six", "seven", "eight",
"nine", "ten","eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen",
"seventeen", "eighteen", "nineteen"}
constant tens = {"twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty",
"ninety"}
constant big = {"thousand", "million", "billion"}
function int2text(atom number)
atom num
integer unit, tmpLng1
sequence outP
outP = ""
num = 0
unit = 1
tmpLng1 = 0
if number = 0 then
return "zero"
end if
num = abs(number)
while 1 do
tmpLng1 = remainder(num,100)
if tmpLng1 > 0 and tmpLng1 < 20 then
outP = small[tmpLng1] & ' ' & outP
elsif tmpLng1 >= 20 then
if remainder(tmpLng1,10) = 0 then
outP = tens[floor(tmpLng1/10)-1] & ' ' & outP
else
outP = tens[floor(tmpLng1/10)-1] & '-' & small[remainder(tmpLng1, 10)] & ' ' & outP
end if
end if
tmpLng1 = floor(remainder(num, 1000) / 100)
if tmpLng1 then
outP = small[tmpLng1] & " hundred " & outP
end if
num = floor(num/1000)
if num < 1 then
exit
end if
tmpLng1 = remainder(num,1000)
if tmpLng1 then
outP = big[unit] & ' ' & outP
end if
unit = unit + 1
end while
if number < 0 then
outP = "negative " & outP
end if
return outP[1..$-1]
end function
puts(1,int2text(900000001) & "\n")
puts(1,int2text(1234567890) & "\n")
puts(1,int2text(-987654321) & "\n")
puts(1,int2text(0) & "\n")