Program to convert a given number to words | Set 2 (original) (raw)

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

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

JavaScript

PHP

one,one, one,ten; $str = ""; // if n is more than 19, divide it if ($n > 19) { str.=str .= str.=ten[(int)($n / 10)]; str.=str .= str.=one[$n % 10]; } else str.=str .= str.=one[$n]; // if n is non-zero if ($n != 0 ) str.=str .= 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)(out .= numToWords((int)(out.=numToWords((int)(n / 10000000), "crore "); // handles digits at hundred thousands // and one millions places (if any) out.=numToWords(((int)(out .= numToWords(((int)(out.=numToWords(((int)(n / 100000) % 100), "lakh "); // handles digits at thousands and tens // thousands places (if any) out.=numToWords(((int)(out .= numToWords(((int)(out.=numToWords(((int)(n / 1000) % 100), "thousand "); // handles digit at hundreds places (if any) out.=numToWords(((int)(out .= numToWords(((int)(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((out .= numToWords((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 ?>

`

Output

forty three crore eighty two lakh thirty seven thousand seven hundred and sixty four

**Complexity Analysis: