#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void convert_to_words(char *num)
{
char *single_digits[] = { "zero", "one", "two", "three", "four",
"five", "six", "seven", "eight", "nine"};
char *two_digits[] = {"", "ten", "eleven", "twelve", "thirteen", "fourteen",
"fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
char *tens_multiple[] = {"", "", "twenty", "thirty", "forty", "fifty",
"sixty", "seventy", "eighty", "ninety"};
char *tens_power[] = {"hundred", "thousand"};
/* Used for debugging purpose only */
/* For single digit number */
if (len == 1) {
printf("%s\n", single_digits
[*num
- '0']); return;
}
/* Iterate while num is not '\0' */
while (*num != '\0') {
/* Code path for first 2 digits */
if (len >= 3) {
if (*num -'0' != 0) {
printf("%s ", single_digits
[*num
- '0']); printf("%s ", tens_power
[len
-3]); // here len can be 3 or 4 }
--len;
}
/* Code path for last 2 digits */
else {
/* Need to explicitly handle 10-19. Sum of the two digits is
used as index of "two_digits" array of strings */
if (*num == '1') {
int sum = *num - '0' + *(num + 1)- '0';
printf("%s\n", two_digits
[sum
]); return;
}
/* Need to explicitely handle 20 */
else if (*num == '2' && *(num + 1) == '0') {
return;
}
/* Rest of the two digit numbers i.e., 21 to 99 */
else {
int i = *num - '0';
printf("%s ", i
? tens_multiple
[i
]: ""); ++num;
if (*num != '0')
printf("%s ", single_digits
[*num
- '0']); }
}
++num;
}
}
/* Driver program to test above function */
int main(void)
{
convert_to_words("9923");
convert_to_words("523");
convert_to_words("89");
convert_to_words("8989");
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgogCnZvaWQgY29udmVydF90b193b3JkcyhjaGFyICpudW0pCnsKICAgIGludCBsZW4gPSBzdHJsZW4obnVtKTsgIAogICAgCiAgICBjaGFyICpzaW5nbGVfZGlnaXRzW10gPSB7ICJ6ZXJvIiwgIm9uZSIsICJ0d28iLCAidGhyZWUiLCAiZm91ciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaXZlIiwgInNpeCIsICJzZXZlbiIsICJlaWdodCIsICJuaW5lIn07CiAKCiAgICBjaGFyICp0d29fZGlnaXRzW10gPSB7IiIsICJ0ZW4iLCAiZWxldmVuIiwgInR3ZWx2ZSIsICJ0aGlydGVlbiIsICJmb3VydGVlbiIsCiAgICAgICAgICAgICAgICAgICAgICJmaWZ0ZWVuIiwgInNpeHRlZW4iLCAic2V2ZW50ZWVuIiwgImVpZ2h0ZWVuIiwgIm5pbmV0ZWVuIn07CiAKCiAgICBjaGFyICp0ZW5zX211bHRpcGxlW10gPSB7IiIsICIiLCAidHdlbnR5IiwgInRoaXJ0eSIsICJmb3J0eSIsICJmaWZ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpeHR5IiwgInNldmVudHkiLCAiZWlnaHR5IiwgIm5pbmV0eSJ9OwogCiAgICBjaGFyICp0ZW5zX3Bvd2VyW10gPSB7Imh1bmRyZWQiLCAidGhvdXNhbmQifTsKIAogICAgLyogVXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2Ugb25seSAqLwogICAgcHJpbnRmKCJcbiVzOiAiLCBudW0pOwogCiAgICAvKiBGb3Igc2luZ2xlIGRpZ2l0IG51bWJlciAqLwogICAgaWYgKGxlbiA9PSAxKSB7CiAgICAgICAgcHJpbnRmKCIlc1xuIiwgc2luZ2xlX2RpZ2l0c1sqbnVtIC0gJzAnXSk7CiAgICAgICAgcmV0dXJuOwogICAgfQogCiAgICAgLyogSXRlcmF0ZSB3aGlsZSBudW0gaXMgbm90ICdcMCcgKi8KICAgICB3aGlsZSAoKm51bSAhPSAnXDAnKSB7CiAKICAgICAgICAvKiBDb2RlIHBhdGggZm9yIGZpcnN0IDIgZGlnaXRzICovCiAgICAgICAgaWYgKGxlbiA+PSAzKSB7CiAgICAgICAgICAgIGlmICgqbnVtIC0nMCcgIT0gMCkgewogICAgICAgICAgICAgICAgcHJpbnRmKCIlcyAiLCBzaW5nbGVfZGlnaXRzWypudW0gLSAnMCddKTsKICAgICAgICAgICAgICAgIHByaW50ZigiJXMgIiwgdGVuc19wb3dlcltsZW4tM10pOyAvLyBoZXJlIGxlbiBjYW4gYmUgMyBvciA0CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLS1sZW47CiAgICAgICAgfQogCiAgICAgICAgLyogQ29kZSBwYXRoIGZvciBsYXN0IDIgZGlnaXRzICovCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIC8qIE5lZWQgdG8gZXhwbGljaXRseSBoYW5kbGUgMTAtMTkuIFN1bSBvZiB0aGUgdHdvIGRpZ2l0cyBpcwogICAgICAgICAgICAgICB1c2VkIGFzIGluZGV4IG9mICJ0d29fZGlnaXRzIiBhcnJheSBvZiBzdHJpbmdzICovCiAgICAgICAgICAgIGlmICgqbnVtID09ICcxJykgewogICAgICAgICAgICAgICAgaW50IHN1bSA9ICpudW0gLSAnMCcgKyAqKG51bSArIDEpLSAnMCc7CiAgICAgICAgICAgICAgICBwcmludGYoIiVzXG4iLCB0d29fZGlnaXRzW3N1bV0pOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAKICAgICAgICAgICAgLyogTmVlZCB0byBleHBsaWNpdGVseSBoYW5kbGUgMjAgKi8KICAgICAgICAgICAgZWxzZSBpZiAoKm51bSA9PSAnMicgJiYgKihudW0gKyAxKSA9PSAnMCcpIHsKICAgICAgICAgICAgICAgIHByaW50ZigidHdlbnR5XG4iKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogCiAgICAgICAgICAgIC8qIFJlc3Qgb2YgdGhlIHR3byBkaWdpdCBudW1iZXJzIGkuZS4sIDIxIHRvIDk5ICovCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaW50IGkgPSAqbnVtIC0gJzAnOwogICAgICAgICAgICAgICAgcHJpbnRmKCIlcyAiLCBpPyB0ZW5zX211bHRpcGxlW2ldOiAiIik7CiAgICAgICAgICAgICAgICArK251bTsKICAgICAgICAgICAgICAgIGlmICgqbnVtICE9ICcwJykKICAgICAgICAgICAgICAgICAgICBwcmludGYoIiVzICIsIHNpbmdsZV9kaWdpdHNbKm51bSAtICcwJ10pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICsrbnVtOwogICAgfQp9CiAKLyogRHJpdmVyIHByb2dyYW0gdG8gdGVzdCBhYm92ZSBmdW5jdGlvbiAqLwppbnQgbWFpbih2b2lkKQp7CiAgICBjb252ZXJ0X3RvX3dvcmRzKCI5OTIzIik7CiAgICBjb252ZXJ0X3RvX3dvcmRzKCI1MjMiKTsKICAgIGNvbnZlcnRfdG9fd29yZHMoIjg5Iik7CiAgICBjb252ZXJ0X3RvX3dvcmRzKCI4OTg5Iik7CiAKICAgIHJldHVybiAwOwp9