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 fourInput: 999999
Output: nine lakh ninety nine thousand nine hundred and ninety nineInput: 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++ 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 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 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 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# 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 |
<script> /* Javascript 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
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 are 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> |
<?php /* PHP 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 = 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 are to make array indexing simple $ten = array ( "" , "" , "twenty " , "thirty " , "forty " ,
"fifty " , "sixty " , "seventy " , "eighty " ,
"ninety " );
// n is 1- or 2-digit number function 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 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 ?> |
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.