# Program to convert a given number to words | Set 2

• Difficulty Level : Medium
• Last Updated : 14 Sep, 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"```
Recommended Practice

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++

 `/* 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 ``using` `namespace` `std;` `// strings at index 0 is not used, it is to make array``// indexing simple``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 are to``// make array indexing simple``string ten[] = { ``""``, ``""``, ``"twenty "``, ``"thirty "``, ``"forty "``,``                 ``"fifty "``, ``"sixty "``, ``"seventy "``, ``"eighty "``,``                 ``"ninety "` `};` `// n is 1- or 2-digit number``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)``        ``str += s;` `    ``return` `str;``}` `// Function to print a given number in words``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((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 code``int` `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

 `/* Java program to print a given number in words.``The program handles till 9 digits numbers and``can 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 are 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

 `# 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 simple``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 are to make array indexing simple``ten ``=` `[ "``", "``", "``twenty ``", "``thirty ``", "``forty ",``        ``"fifty "``, ``"sixty "``, ``"seventy "``, ``"eighty "``,``        ``"ninety "``];` `# n is 1- or 2-digit number``def` `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 words``def` `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 number``n ``=` `438237764``;` `# convert given number in words``print``(convertToWords(n));` `# This code is contributed by mits`

## C#

 `/* 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 */``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 are 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

 ` 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 words``function` `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 words``echo` `convertToWords(``\$n``) . ``"\n"``;` `// This code is contributed by Akanksha Rai``?>`

## Javascript

 ``

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.