RosettaCodeData/Task/Number-names/BlitzMax/number-names.blitz

82 lines
1.8 KiB
Plaintext

SuperStrict
Framework BRL.StandardIO
spellIt( 99)
spellIt( 300)
spellIt( 310)
spellIt( 1501)
spellIt( 12609)
spellIt( 512609)
spellIt( 43112609)
spellIt(1234567890)
Type TSpell
Field smallNumbers:String[] = ["zero", "one", "two", "three", "four", "five", ..
"six", "seven", "eight", "nine", "ten", ..
"eleven", "twelve", "thirteen", "fourteen", "fifteen", ..
"sixteen", "seventeen", "eighteen", "nineteen" ]
Field decades:String[] = [ "", "", "twenty", "thirty", "forty", ..
"fifty", "sixty", "seventy", "eighty", "ninety" ]
Field thousandPowers:String[] = [ " billion", " million", " thousand", "" ]
Method spellHundreds:String(number:Int)
Local result:String
If number > 99 Then
result = smallNumbers[number / 100]
result :+ " hundred"
number = number Mod 100
If number Then
result :+ " and "
End If
End If
If number >= 20 Then
result :+ decades[number / 10]
number = number Mod 10
If number Then
result :+ "-"
End If
End If
If number > 0 And number < 20 Then
result :+ smallNumbers[number]
End If
Return result
End Method
Method spell:String(number:Long)
If number < 20 Then
Return smallNumbers[number]
End If
Local result:String
Local scaleIndex:Int = 0
Local scaleFactor:Long = 1000000000:Long ' 1 billion
While scaleFactor > 0
If number >= scaleFactor
Local h:Long = number / scaleFactor
result :+ spellHundreds(h) + thousandPowers[scaleIndex]
number = number Mod scaleFactor
If number Then
result :+ ", "
End If
End If
scaleFactor :/ 1000
scaleIndex :+ 1
Wend
Return result
End Method
End Type
Function spellIt(number:Long)
Local numberSpell:TSpell = New TSpell
Print number + " " + numberSpell.spell(number)
End Function