 GFG App
Open App Browser
Continue

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

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.