Program to convert a given number to words

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

filter_none

edit
close

play_arrow

link
brightness_4
code

/* C program to print a given number in words. The program handles
numbers from 0 to 9999 */
#include <stdio.h>
#include <string.h>
#include <stdlib.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 explicitely 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("8989");
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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] - '0';
                System.out.println(two_digits[sum]);
                return;
            }
  
            /* Need to explicitely 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("8989".toCharArray());
}
}
// This code is contributed 
// by Mithun Kumar

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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]) - '0']);
        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]) - 48);
                print(two_digits[sum]);
                return;
  
            # Need to explicitely 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 Code
convert_to_words("9923");
convert_to_words("523");
convert_to_words("89");
convert_to_words("8989");
  
# This code is contributed 
# by Mithun Kumar

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to print a given 
// number in words. The program 
// handles numbers from 0 to 9999 
using 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] - '0'
                Console.WriteLine(two_digits[sum]); 
                return
            
  
            /* Need to explicitely 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("8989".ToCharArray()); 
  
// This code is contributed 
// by Mits

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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 words 
function 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 explicitely 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 Code
convert_to_words("9923");
convert_to_words("523");
convert_to_words("89");
convert_to_words("8989");
  
// This code is contributed 
// by Mithun Kumar
?>

chevron_right



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.



My Personal Notes arrow_drop_up

Improved By : Mithun Kumar