Program to convert a given number to words | Set 2

04 Jan, 2022
Write code to convert a given number into words.Examples: 
Input: 438237764
Output: forty three crore eighty two lakh 
thirty seven thousand seven hundred and 
sixty four 

Input: 999999
Output: nine lakh ninety nine thousand nine
hundred and ninety nine

Input: 1000
Output: one thousand 
Explanation:1000 in words is "one thousand"
We have already discussed an approach that handles numbers from 0 to 9999 in the previous post.Solution: This approach can handle number till 20-digits long which are less than ULLONG_MAX (Maximum value for an object of type unsigned long long int). ULLONG_MAX is equal to 18446744073709551615 in decimal assuming compiler takes 8 bytes for storage of unsigned long long int.Below representation shows place value chart for any 9 digits positive integer:  
4  3  8  2  3  7  7  6  4
|  |  |  |  |  |  |  |  |__ ones' place
|  |  |  |  |  |  |  |__ __ tens' place
|  |  |  |  |  |  |__ __ __ hundreds' place
|  |  |  |  |  |__ __ __ __ thousands' place
|  |  |  |  |__ __ __ __ __ tens thousands' place
|  |  |  |__ __ __ __ __ __ hundred thousands' place
|  |  |__ __ __ __ __ __ __ one millions' place
|  |__ __ __ __ __ __ __ __ ten millions' place
|__ __ __ __ __ __ __ __ __ hundred millions' place
The idea is to divide the number into individual digits based on the above place value chart and handle them starting from the Most Significant Digit. Here’s a simple implementation that supports numbers having a maximum of 9 digits. The program can be easily extended to support any 20-digit number. 
C++
Java
Python3
C#
PHP
Javascript
/* C++ program to print a given number in words.   The program handles till 9 digits numbers and   can be easily extended to 20 digit number */#include <iostream>using namespace std; // strings at index 0 is not used, it is to make array// indexing simplestring one[] = { "", "one ", "two ", "three ", "four ",                 "five ", "six ", "seven ", "eight ",                 "nine ", "ten ", "eleven ", "twelve ",                 "thirteen ", "fourteen ", "fifteen ",                 "sixteen ", "seventeen ", "eighteen ",                 "nineteen " }; // strings at index 0 and 1 are not used, they is to// make array indexing simplestring ten[] = { "", "", "twenty ", "thirty ", "forty ",                 "fifty ", "sixty ", "seventy ", "eighty ",                 "ninety " }; // n is 1- or 2-digit numberstring numToWords(int n, string s){    string str = "";    // if n is more than 19, divide it    if (n > 19)        str += ten[n / 10] + one[n % 10];    else        str += one[n];     // if n is non-zero    if (n)        str += s;     return str;} // Function to print a given number in wordsstring convertToWords(long n){    // stores word representation of given number n    string out;     // handles digits at ten millions and hundred    // millions places (if any)    out += numToWords((n / 10000000), "crore ");     // handles digits at hundred thousands and one    // millions places (if any)    out += numToWords(((n / 100000) % 100), "lakh ");     // handles digits at thousands and tens thousands    // places (if any)    out += numToWords(((n / 1000) % 100), "thousand ");     // handles digit at hundreds places (if any)    out += numToWords(((n / 100) % 10), "hundred ");     if (n > 100 && n % 100)        out += "and ";     // handles digits at ones and tens places (if any)    out += numToWords((n % 100), "");       //Handling the n=0 case    if(out=="")    out = "zero";     return out;} // Driver codeint main(){    // long handles upto 9 digit no    // change to unsigned long long int to    // handle more digit number    long n = 438237764;     // convert given number in words    cout << convertToWords(n) << endl;     return 0;}
/* Java program to print a given number in words.The program handles till 9 digits numbers andcan be easily extended to 20 digit number */class GFG {     // Strings at index 0 is not used, it is to make array    // indexing simple    static String one[] = { "", "one ", "two ", "three ", "four ",                            "five ", "six ", "seven ", "eight ",                            "nine ", "ten ", "eleven ", "twelve ",                            "thirteen ", "fourteen ", "fifteen ",                            "sixteen ", "seventeen ", "eighteen ",                            "nineteen " };     // Strings at index 0 and 1 are not used, they is to    // make array indexing simple    static String ten[] = { "", "", "twenty ", "thirty ", "forty ",                            "fifty ", "sixty ", "seventy ", "eighty ",                            "ninety " };     // n is 1- or 2-digit number    static String numToWords(int n, String s)    {        String str = "";        // if n is more than 19, divide it        if (n > 19) {            str += ten[n / 10] + one[n % 10];        }        else {            str += one[n];        }         // if n is non-zero        if (n != 0) {            str += s;        }         return str;    }     // Function to print a given number in words    static String convertToWords(long n)    {        // stores word representation of given number n        String out = "";         // handles digits at ten millions and hundred        // millions places (if any)        out += numToWords((int)(n / 10000000), "crore ");         // handles digits at hundred thousands and one        // millions places (if any)        out += numToWords((int)((n / 100000) % 100), "lakh ");         // handles digits at thousands and tens thousands        // places (if any)        out += numToWords((int)((n / 1000) % 100), "thousand ");         // handles digit at hundreds places (if any)        out += numToWords((int)((n / 100) % 10), "hundred ");         if (n > 100 && n % 100 > 0) {            out += "and ";        }         // handles digits at ones and tens places (if any)        out += numToWords((int)(n % 100), "");         return out;    }     // Driver code    public static void main(String[] args)    {        // long handles upto 9 digit no        // change to unsigned long long int to        // handle more digit number        long n = 438237764;         // convert given number in words        System.out.printf(convertToWords(n));    }}
# Python3 program to print a given number in words.# The program handles till 9 digits numbers and# can be easily extended to 20 digit number # strings at index 0 is not used, it# is to make array indexing simpleone = [ "", "one ", "two ", "three ", "four ",        "five ", "six ", "seven ", "eight ",        "nine ", "ten ", "eleven ", "twelve ",        "thirteen ", "fourteen ", "fifteen ",        "sixteen ", "seventeen ", "eighteen ",        "nineteen "]; # strings at index 0 and 1 are not used,# they is to make array indexing simpleten = [ "", "", "twenty ", "thirty ", "forty ",        "fifty ", "sixty ", "seventy ", "eighty ",        "ninety "]; # n is 1- or 2-digit numberdef numToWords(n, s):     str = "";         # if n is more than 19, divide it    if (n > 19):        str += ten[n // 10] + one[n % 10];    else:        str += one[n];     # if n is non-zero    if (n):        str += s;     return str; # Function to print a given number in wordsdef convertToWords(n):     # stores word representation of given    # number n    out = "";     # handles digits at ten millions and    # hundred millions places (if any)    out += numToWords((n // 10000000),                            "crore ");     # handles digits at hundred thousands    # and one millions places (if any)    out += numToWords(((n // 100000) % 100),                                   "lakh ");     # handles digits at thousands and tens    # thousands places (if any)    out += numToWords(((n // 1000) % 100),                             "thousand ");     # handles digit at hundreds places (if any)    out += numToWords(((n // 100) % 10),                            "hundred ");     if (n > 100 and n % 100):        out += "and ";     # handles digits at ones and tens    # places (if any)    out += numToWords((n % 100), "");     return out; # Driver code # long handles upto 9 digit no# change to unsigned long long# int to handle more digit numbern = 438237764; # convert given number in wordsprint(convertToWords(n)); # This code is contributed by mits
/* C# program to print a given number in words.The program handles till 9 digits numbers andcan be easily extended to 20 digit number */using System;class GFG {     // strings at index 0 is not used, it is    // to make array indexing simple    static string[] one = { "", "one ", "two ", "three ", "four ",                            "five ", "six ", "seven ", "eight ",                            "nine ", "ten ", "eleven ", "twelve ",                            "thirteen ", "fourteen ", "fifteen ",                            "sixteen ", "seventeen ", "eighteen ",                            "nineteen " };     // strings at index 0 and 1 are not used,    // they is to make array indexing simple    static string[] ten = { "", "", "twenty ", "thirty ", "forty ",                            "fifty ", "sixty ", "seventy ", "eighty ",                            "ninety " };     // n is 1- or 2-digit number    static string numToWords(int n, string s)    {        string str = "";         // if n is more than 19, divide it        if (n > 19) {            str += ten[n / 10] + one[n % 10];        }        else {            str += one[n];        }         // if n is non-zero        if (n != 0) {            str += s;        }         return str;    }     // Function to print a given number in words    static string convertToWords(long n)    {         // stores word representation of        // given number n        string out1 = "";         // handles digits at ten millions and        // hundred millions places (if any)        out1 += numToWords((int)(n / 10000000),                           "crore ");         // handles digits at hundred thousands        // and one millions places (if any)        out1 += numToWords((int)((n / 100000) % 100),                           "lakh ");         // handles digits at thousands and tens        // thousands places (if any)        out1 += numToWords((int)((n / 1000) % 100),                           "thousand ");         // handles digit at hundreds places (if any)        out1 += numToWords((int)((n / 100) % 10),                           "hundred ");         if (n > 100 && n % 100 > 0) {            out1 += "and ";        }         // handles digits at ones and tens        // places (if any)        out1 += numToWords((int)(n % 100), "");         return out1;    }     // Driver code    static void Main()    {        // long handles upto 9 digit no        // change to unsigned long long int to        // handle more digit number        long n = 438237764;         // convert given number in words        Console.WriteLine(convertToWords(n));    }} // This code is contributed by mits
<?php/* PHP program to print a given number in words.The program handles till 9 digits numbers andcan be easily extended to 20 digit number */ // strings at index 0 is not used, it is// to make array indexing simple$one = array("", "one ", "two ", "three ", "four ",             "five ", "six ", "seven ", "eight ",             "nine ", "ten ", "eleven ", "twelve ",             "thirteen ", "fourteen ", "fifteen ",             "sixteen ", "seventeen ", "eighteen ",             "nineteen "); // strings at index 0 and 1 are not used,// they is to make array indexing simple$ten = array("", "", "twenty ", "thirty ", "forty ",             "fifty ", "sixty ", "seventy ", "eighty ",             "ninety "); // n is 1- or 2-digit numberfunction numToWords($n, $s){    global $one, $ten;    $str = "";         // if n is more than 19, divide it    if ($n > 19)        {            $str .= $ten[(int)($n / 10)];            $str .= $one[$n % 10];        }    else        $str .= $one[$n];     // if n is non-zero    if ($n != 0 )        $str .= $s;     return $str;} // Function to print a given number in wordsfunction convertToWords($n){    // stores word representation of    // given number n    $out = "";     // handles digits at ten millions and    // hundred millions places (if any)    $out .= numToWords((int)($n / 10000000), "crore ");     // handles digits at hundred thousands    // and one millions places (if any)    $out .= numToWords(((int)($n / 100000) % 100), "lakh ");     // handles digits at thousands and tens    // thousands places (if any)    $out .= numToWords(((int)($n / 1000) % 100), "thousand ");     // handles digit at hundreds places (if any)    $out .= numToWords(((int)($n / 100) % 10), "hundred ");     if ($n > 100 && $n % 100)        $out .= "and ";     // handles digits at ones and tens    // places (if any)    $out .= numToWords(($n % 100), "");     return $out;} // Driver code // long handles upto 9 digit no// change to unsigned long long int to// handle more digit number$n = 438237764; // convert given number in wordsecho convertToWords($n) . "\n"; // This code is contributed by Akanksha Rai?>
<script> /* Javascript program to print a given number in words. The program handles till 9 digits numbers andcan be easily extended to20 digit number */   // Strings at index 0 is not used, it is to make array // indexing simple    var one = [ "", "one ", "two ", "three ", "four ",                   "five ", "six ", "seven ", "eight ",                    "nine ", "ten ", "eleven ", "twelve ",                     "thirteen ", "fourteen ", "fifteen ",                      "sixteen ", "seventeen ", "eighteen ",                       "nineteen " ];     // Strings at index 0 and 1 are not used, they is to    // make array indexing simple    var ten = [ "", "", "twenty ", "thirty ", "forty ",              "fifty ", "sixty ", "seventy ", "eighty ",                          "ninety " ];     // n is 1- or 2-digit number    function numToWords(n, s)    {        var str = "";        // if n is more than 19, divide it        if (n > 19) {            str += ten[parseInt(n / 10)] + one[n % 10];        }        else {            str += one[n];        }         // if n is non-zero        if (n != 0) {            str += s;        }         return str;    }     // Function to print a given number in words    function convertToWords(n)    {        // stores word representation of given number n        var out = "";         // handles digits at ten millions and hundred        // millions places (if any)        out += numToWords(parseInt(n / 10000000),        "crore ");         // handles digits at hundred thousands and one        // millions places (if any)        out += numToWords(parseInt((n / 100000) % 100),        "lakh ");         // handles digits at thousands and tens thousands        // places (if any)        out += numToWords(parseInt((n / 1000) % 100),        "thousand ");         // handles digit at hundreds places (if any)        out += numToWords(parseInt((n / 100) % 10),        "hundred ");         if (n > 100 && n % 100 > 0) {            out += "and ";        }         // handles digits at ones and tens places (if any)        out += numToWords(parseInt(n % 100), "");         return out;    }     // Driver code // var handles upto 9 digit no    // change to unsigned var var var to    // handle more digit number    var n = 438237764;     // convert given number in words    document.write(convertToWords(n));     // This code is contributed by Amit Katiyar </script>
Output: 
forty three crore eighty two lakh thirty seven 
thousand seven hundred and sixty four 
Complexity Analysis: 
Time complexity: O(1). The loop runs for a constant amount of time.
Auxiliary space: O(1). As no extra space is required.
This article is contributed by Aditya Goel. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
29AjayKumar
Mithun Kumar
Akanksha_Rai
andrew1234
amit143katiyar
simranarora5sos
amol935paliwal
Mathematical
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.