This is the current problem to solve:
Unless otherwise specified, all strings are Z-strings.
|Input:||HL ® free space|
BCDE = number between 0 and 999999999
|Output:||BCDE will contain a 32 bit number (LSB in E, MSB in B) with at most 9 decimal digits (you may assume this), which should be spelled out, according to the rules below. The string should be created at HL, which will point to enough free memory for the correct answer. The string should terminate with a null byte. When the routine is done, HL should point to the beginning of the string (ie, HL should be preserved). |
|Special:||You may not use any temporary memory! You'll have to include any temporary space in the program code itself.|
Rules for spelling
- Spelling for ones: zero, one, two, three, four, five, six, seven, eight, nine
- Spelling for teens: ten, eleven, twelve, thirteen, fourteen, fifteen, sixteen, seventeen, eighteen, nineteen
- Spelling for tens: twenty, thirty, forty, fifty, sixty, seventy, eighty, ninety
- Spelling for hundreds: hundred, thousand, million
- A white blank should separate each of the numbers above, except between ones and tens, where are hyphen ('-') should be used.
- No pluralization should be done.
|Input:||BCDE = 50312|
|Output:||HL -> "fifty thousand three hundred twelve"|
|Input:||BCDE = 198000|
|Output:||HL -> "one hundred ninety-eight thousand"|
|Input:||BCDE = 10000000|
|Output:||HL -> "ten million"|
|Input:||BCDE = 123456789|
|Output:||HL -> "one hundred twenty-three million four hundred fifty-six thousand seven hundred eighty-nine"|
Hint and advice
This page has a simple algorithm (in Java) for the spellout procedure.
The following piece of code will extract the last digit in BCDE and store it in A, while at the same time dividing BCDE with ten. Please note that you do not have to use this routine! If you do, the size will count.
; Input: BCDE = 32 bit
; Output: BCDE = BCDE/10, A = BCDE mod 10
Defining 32 bit numbers
The following simple macro can be used to store a 32 bit number in two 16 bit registers.
#define ld_bcde(x) ld bc,(x)>>16 \ ld de,(x)&$FFFF
The current round ended on 09/05/1999, 6:00 pm CET!