Program to convert a given number to words - GeeksforGeeks

23 Mar, 2022
Write code to convert a given number into words. For example, if “1234” is given as input, output should be “one thousand two hundred thirty four”.
Following is the implementation for the same. The code supports numbers up-to 4 digits, i.e., numbers from 0 to 9999. Idea is to create arrays that store individual parts of output strings. One array is used for single digits, one for numbers from 10 to 19, one for 20, 30, 40, 50, .. etc, and one for powers of 10. The given number is divided in two parts: first two digits and last two digits, and the two parts are printed separately. 
C++
C
Java
Python3
C#
PHP
Javascript
// C++ program for above approach#include <bits/stdc++.h>using namespace std; /* A function that prints given number in words */void convert_to_words(char* num){  int len = strlen(    num); // Get number of digits in given number   /* Base cases */  if (len == 0) {    cout << "empty string" << endl;    return;  }  if (len > 4) {    cout <<"Length more than 4 is not supported\n" << endl;    return;  }   /* The first string is not used, it is to make        array indexing simple */  char* single_digits[]    = { "zero", "one", "two ",   "three ", "four",       "five ", "six", "seven", "eight ", "nine " };   /* The first string is not used, it is to make        array indexing simple */  char* two_digits[]    = { "",          "ten",      "eleven",  "twelve",       "thirteen",  "fourteen", "fifteen", "sixteen",       "seventeen", "eighteen", "nineteen" };   /* The first two string are not used, they are to make        array indexing simple*/  char* tens_multiple[] = { "",       "",        "twenty ",                           "thirty", "forty",   "fifty",                           "sixty",  "seventy", "eighty ",                           "ninety " };   char* tens_power[] = { "hundred ", "thousand " };   /* Used for debugging purpose only */  cout << endl;  cout << num << ": ";   /* For single digit number */  if (len == 1) {    cout << single_digits[*num - '0'] << endl;    return;  }   /* Iterate while num is not '\0' */  while (*num != '\0') {     /* Code path for first 2 digits */    if (len >= 3) {      if (*num - '0' != 0) {        cout << single_digits[*num - '0'];        cout << 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';        cout << two_digits[sum] << endl;        return;      }       /* Need to explicitly handle 20 */      else if (*num == '2' && *(num + 1) == '0') {        cout <<"twenty" << endl;        return;      }       /* Rest of the two digit numbers i.e., 21 to 99             */      else {        int i = *num - '0';        if (i > 0)          cout << tens_multiple[i]  << " ";        else          cout << "";        ++num;        if (*num != '0')          cout << single_digits[*num - '0'];      }    }    ++num;  }} // Driver Codeint main(){  convert_to_words("9923");  convert_to_words("523");  convert_to_words("89");  convert_to_words("8");} // This code is contributed by sanjoy_62.
/* C program to print a given number in words. The programhandles numbers from 0 to 9999 */#include <stdio.h>#include <stdlib.h>#include <string.h> /* A function that prints given number in words */void convert_to_words(char* num){    int len = strlen(        num); // Get number of digits in given number     /* Base cases */    if (len == 0) {        fprintf(stderr, "empty string\n");        return;    }    if (len > 4) {        fprintf(stderr,                "Length more than 4 is not supported\n");        return;    }     /* The first string is not used, it is to make        array indexing simple */    char* single_digits[]        = { "zero", "one", "two",   "three", "four",            "five", "six", "seven", "eight", "nine" };     /* The first string is not used, it is to make        array indexing simple */    char* two_digits[]        = { "",          "ten",      "eleven",  "twelve",            "thirteen",  "fourteen", "fifteen", "sixteen",            "seventeen", "eighteen", "nineteen" };     /* The first two string are not used, they are to make        array indexing simple*/    char* tens_multiple[] = { "",       "",        "twenty",                              "thirty", "forty",   "fifty",                              "sixty",  "seventy", "eighty",                              "ninety" };     char* tens_power[] = { "hundred", "thousand" };     /* Used for debugging purpose only */    printf("\n%s: ", num);     /* 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 explicitly handle 20 */            else if (*num == '2' && *(num + 1) == '0') {                printf("twenty\n");                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("8");     return 0;}
// Java program to print a given number in words. The// program handles numbers from 0 to 9999 class GFG {    // A function that prints    // given number in words    static void convert_to_words(char[] num)    {        // Get number of digits        // in given number        int len = num.length;         // Base cases        if (len == 0) {            System.out.println("empty string");            return;        }        if (len > 4) {            System.out.println(                "Length more than 4 is not supported");            return;        }         /* The first string is not used, it is to make            array indexing simple */        String[] single_digits = new String[] {            "zero", "one", "two",   "three", "four",            "five", "six", "seven", "eight", "nine"        };         /* The first string is not used, it is to make            array indexing simple */        String[] two_digits = new String[] {            "",          "ten",      "eleven",  "twelve",            "thirteen",  "fourteen", "fifteen", "sixteen",            "seventeen", "eighteen", "nineteen"        };         /* The first two string are not used, they are to         * make array indexing simple*/        String[] tens_multiple = new String[] {            "",      "",      "twenty",  "thirty", "forty",            "fifty", "sixty", "seventy", "eighty", "ninety"        };         String[] tens_power            = new String[] { "hundred", "thousand" };         /* Used for debugging purpose only */        System.out.print(String.valueOf(num) + ": ");         /* For single digit number */        if (len == 1) {            System.out.println(single_digits[num[0] - '0']);            return;        }         /* Iterate while num            is not '\0' */        int x = 0;        while (x < num.length) {             /* Code path for first 2 digits */            if (len >= 3) {                if (num[x] - '0' != 0) {                    System.out.print(                        single_digits[num[x] - '0'] + " ");                    System.out.print(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[x] - '0' == 1) {                    int sum                        = num[x] - '0' + num[x + 1] - '0';                    System.out.println(two_digits[sum]);                    return;                }                 /* Need to explicitly handle 20 */                else if (num[x] - '0' == 2                         && num[x + 1] - '0' == 0) {                    System.out.println("twenty");                    return;                }                 /* Rest of the two digit                numbers i.e., 21 to 99 */                else {                    int i = (num[x] - '0');                    if (i > 0)                        System.out.print(tens_multiple[i]                                         + " ");                    else                        System.out.print("");                    ++x;                    if (num[x] - '0' != 0)                        System.out.println(                            single_digits[num[x] - '0']);                }            }            ++x;        }    }     // Driver Code    public static void main(String[] args)    {        convert_to_words("9923".toCharArray());        convert_to_words("523".toCharArray());        convert_to_words("89".toCharArray());        convert_to_words("8".toCharArray());    }}// This code is contributed// by Mithun Kumar
# Python program to print a given number in# words. The program handles numbers# from 0 to 9999 # A function that prints# given number in words  def convert_to_words(num):     # Get number of digits    # in given number    l = len(num)     # Base cases    if (l == 0):        print("empty string")        return     if (l > 4):        print("Length more than 4 is not supported")        return     # The first string is not used,    # it is to make array indexing simple    single_digits = ["zero", "one", "two", "three",                     "four", "five", "six", "seven",                     "eight", "nine"]     # The first string is not used,    # it is to make array indexing simple    two_digits = ["", "ten", "eleven", "twelve",                  "thirteen", "fourteen", "fifteen",                  "sixteen", "seventeen", "eighteen",                  "nineteen"]     # The first two string are not used,    # they are to make array indexing simple    tens_multiple = ["", "", "twenty", "thirty", "forty",                     "fifty", "sixty", "seventy", "eighty",                     "ninety"]     tens_power = ["hundred", "thousand"]     # Used for debugging purpose only    print(num, ":", end=" ")     # For single digit number    if (l == 1):        print(single_digits[ord(num[0]) - 48])        return     # Iterate while num is not '\0'    x = 0    while (x < len(num)):         # Code path for first 2 digits        if (l >= 3):            if (ord(num[x]) - 48 != 0):                print(single_digits[ord(num[x]) - 48],                      end=" ")                print(tens_power[l - 3], end=" ")                # here len can be 3 or 4             l -= 1         # 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 (ord(num[x]) - 48 == 1):                sum = (ord(num[x]) - 48 +                       ord(num[x+1]) - 48)                print(two_digits[sum])                return             # Need to explicitly handle 20            elif (ord(num[x]) - 48 == 2 and                  ord(num[x + 1]) - 48 == 0):                print("twenty")                return             # Rest of the two digit            # numbers i.e., 21 to 99            else:                i = ord(num[x]) - 48                if(i > 0):                    print(tens_multiple[i], end=" ")                else:                    print("", end="")                x += 1                if(ord(num[x]) - 48 != 0):                    print(single_digits[ord(num[x]) - 48])        x += 1  # Driver Codeconvert_to_words("9923") # Four Digitsconvert_to_words("523") # Three Digitsconvert_to_words("89") # Two Digitsconvert_to_words("8") # One Digits # This code is contributed# by Mithun Kumar
// C# program to print a given// number in words. The program// handles numbers from 0 to 9999using System; class GFG {    // A function that prints    // given number in words    static void convert_to_words(char[] num)    {        // Get number of digits        // in given number        int len = num.Length;         // Base cases        if (len == 0) {            Console.WriteLine("empty string");            return;        }        if (len > 4) {            Console.WriteLine("Length more than "                              + "4 is not supported");            return;        }         /* The first string is not used,           it is to make array indexing simple */        string[] single_digits = new string[] {            "zero", "one", "two",   "three", "four",            "five", "six", "seven", "eight", "nine"        };         /* The first string is not used,           it is to make array indexing simple */        string[] two_digits = new string[] {            "",          "ten",      "eleven",  "twelve",            "thirteen",  "fourteen", "fifteen", "sixteen",            "seventeen", "eighteen", "nineteen"        };         /* The first two string are not used,           they are to make array indexing simple*/        string[] tens_multiple = new string[] {            "",      "",      "twenty",  "thirty", "forty",            "fifty", "sixty", "seventy", "eighty", "ninety"        };         string[] tens_power            = new string[] { "hundred", "thousand" };         /* Used for debugging purpose only */        Console.Write((new string(num)) + ": ");         /* For single digit number */        if (len == 1) {            Console.WriteLine(single_digits[num[0] - '0']);            return;        }         /* Iterate while num            is not '\0' */        int x = 0;        while (x < num.Length) {             /* Code path for first 2 digits */            if (len >= 3) {                if (num[x] - '0' != 0) {                    Console.Write(                        single_digits[num[x] - '0'] + " ");                    Console.Write(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[x] - '0' == 1) {                    int sum = num[x] - '0' + num[x + 1] - '0';                    Console.WriteLine(two_digits[sum]);                    return;                }                 /* Need to explicitly handle 20 */                else if (num[x] - '0' == 2                         && num[x + 1] - '0' == 0) {                    Console.WriteLine("twenty");                    return;                }                 /* Rest of the two digit                numbers i.e., 21 to 99 */                else {                    int i = (num[x] - '0');                    if (i > 0)                        Console.Write(tens_multiple[i]                                      + " ");                    else                        Console.Write("");                    ++x;                    if (num[x] - '0' != 0)                        Console.WriteLine(                            single_digits[num[x] - '0']);                }            }            ++x;        }    }     // Driver Code    public static void Main()    {        convert_to_words("9923".ToCharArray());        convert_to_words("523".ToCharArray());        convert_to_words("89".ToCharArray());        convert_to_words("8".ToCharArray());    }} // This code is contributed// by Mits
<?php// PHP program to print a given// number in words. The// program handles numbers// from 0 to 9999 // A function that prints// given number in wordsfunction convert_to_words($num){    // Get number of digits    // in given number    $len = strlen($num);     // Base cases    if ($len == 0)    {        echo "empty string\n";        return;    }    if ($len > 4)    {        echo "Length more than 4 " .               "is not supported\n";        return;    }     /* The first string is not used,    it is to make array indexing simple */    $single_digits = array("zero", "one", "two",                           "three", "four", "five",                           "six", "seven", "eight",                                           "nine");     /* The first string is not used,    it is to make array indexing simple */    $two_digits = array("", "ten", "eleven", "twelve",                        "thirteen", "fourteen", "fifteen",                        "sixteen", "seventeen", "eighteen",                                               "nineteen");     /* The first two string are not used,    they are to make array indexing simple*/    $tens_multiple = array("", "", "twenty", "thirty",                           "forty", "fifty", "sixty",                           "seventy", "eighty", "ninety");     $tens_power = array("hundred", "thousand");     /* Used for debugging purpose only */    echo $num.": ";     /* For single digit number */    if ($len == 1)    {        echo $single_digits[$num[0] - '0'] . " \n";        return;    }     /* Iterate while num        is not '\0' */    $x = 0;    while ($x < strlen($num))    {         /* Code path for first 2 digits */        if ($len >= 3)        {            if ($num[$x]-'0' != 0)            {                echo $single_digits[$num[$x] - '0'] . " ";                echo $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[$x] - '0' == 1)            {                $sum = $num[$x] - '0' +                       $num[$x] - '0';                echo $two_digits[$sum] . " \n";                return;            }             /* Need to explicitly handle 20 */            else if ($num[$x] - '0' == 2 &&                     $num[$x + 1] - '0' == 0)            {                echo "twenty\n";                return;            }             /* Rest of the two digit            numbers i.e., 21 to 99 */            else            {                $i = $num[$x] - '0';                if($i > 0)                echo $tens_multiple[$i] . " ";                else                echo "";                ++$x;                if ($num[$x] - '0' != 0)                    echo $single_digits[$num[$x] -                                     '0'] . " \n";            }        }        ++$x;    }} // Driver Codeconvert_to_words("9923");convert_to_words("523");convert_to_words("89");convert_to_words("8"); // This code is contributed// by Mithun Kumar?>
<script> // JavaScript program to document.write a given number in// words. The program handles numbers// from 0 to 9999 // A function that document.writes// given number in wordsfunction convert_to_words(num){     // Get number of digits    // in given number    let l = num.length     // Base cases    if (l == 0){        document.write("empty string","</br>")        return    }     if (l > 4){        document.write("Length more than 4 is not supported","</br>")        return    }     // The first string is not used,    // it is to make array indexing simple    let single_digits = ["zero", "one", "two", "three",                     "four", "five", "six", "seven",                     "eight", "nine"]     // The first string is not used,    // it is to make array indexing simple    let two_digits = ["", "ten", "eleven", "twelve",                  "thirteen", "fourteen", "fifteen",                  "sixteen", "seventeen", "eighteen",                  "nineteen"]     // The first two string are not used,    // they are to make array indexing simple    let tens_multiple = ["", "", "twenty", "thirty", "forty",                     "fifty", "sixty", "seventy", "eighty",                     "ninety"]     let tens_power = ["hundred", "thousand"]     // Used for debugging purpose only    document.write(num, ":"," ")     // For single digit number    if (l == 1){        document.write(single_digits[num.charCodeAt(0) - 48],"</br>")        return    }     // Iterate while num is not '\0'    let x = 0    while (x < num.length){         // Code path for first 2 digits        if (l >= 3){            if (num.charCodeAt(x) - 48 != 0){                document.write(single_digits[num.charCodeAt(x) - 48]," ")                document.write(tens_power[l - 3]," ")                // here len can be 3 or 4            }             l -= 1        }         // 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.charCodeAt(x) - 48 == 1){                sum = (num.charCodeAt(x) - 48 + num.charCodeAt(x+1) - 48)                document.write(two_digits[sum],"</br>")                return            }             // Need to explicitly handle 20            else if (num.charCodeAt(x) - 48 == 2 &&                  num.charCodeAt(x + 1) - 48 == 0){                document.write("twenty","</br>")                return            }             // Rest of the two digit            // numbers i.e., 21 to 99            else{                i = num.charCodeAt(x) - 48                if(i > 0)                    document.write(tens_multiple[i], end=" ")                else                    document.write("", end="")                x += 1                if(num.charCodeAt(x) - 48 != 0)                    document.write(single_digits[num.charCodeAt(x) - 48],"</br>")            }        }        x += 1    } } // Driver Codeconvert_to_words("9923") // Four Digitsconvert_to_words("523") // Three Digitsconvert_to_words("89") // Two Digitsconvert_to_words("8") // One Digits // This code is contributed by shinjanpatra </script>
Output:
9923: nine thousand nine hundred twenty three
523: five hundred twenty three
89: eighty nine
8989: eight thousand nine hundred eighty nine
This article is compiled by Narendra Kangralkar. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Mithun Kumar
bjayashankar2102
saurabhsharma28
nknanthu13
yeddlapurishivasai
simranarora5sos
sanjoy_62
shinjanpatra
Amazon
Microsoft
Oracle
Zoho
Arrays
Mathematical
Zoho
Amazon
Microsoft
Oracle
Arrays
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Stack Data Structure (Introduction and Program)
Top 50 Array Coding Problems for Interviews
Introduction to Arrays
Multidimensional Arrays in Java
Linear Search
Program for Fibonacci numbers
C++ Data Types
Write a program to print all permutations of a given string
Set in C++ Standard Template Library (STL)
Program to find GCD or HCF of two numbers