GeeksforGeeks App
Open App
Browser
Continue

# Print all numbers up to N in words in lexicographical order

Given an integer N, the task is to print all numbers from 1 to N (0 < N < 100000) in words in lexicographical order.

Examples :

Input: N = 11
Output: eight, eleven, five, four, nine, one, seven, six, three, two
Explanation:
The numbers from 1 to N is 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11.
Their respective representations in words are {one, two, three, four, five, six, seven, eight, nine, ten, eleven}.
Their correct lexicographical order is {eight, eleven, five, four, nine, one, seven, six, ten, three, two}.

Input: N = 5
Output: five, four, one, three, two
Explanation:
The numbers from 1 to N is 1, 2, 3, 4, 5.
Their respective representations in words are {one, two, three, four, five}.
Their correct lexicographical order is {five, four, one, three, two}.

Approach: Follow the steps below to solve the problem:

1. Initialize an array words[] of size N + 1 which stores the strings representations of each index from 1 to N at respective indices.
2. Convert all numbers from 1 to N to words and store them at their corresponding indices.
3. Sort the array words[] in ascending order.
4. Print the elements present in the array words[].

Below is the implementation of the above approach:

## C++

 `#include ``#include ``#include ``#include ` `using` `namespace` `std;` `// Function to convert a number to words``string number_to_words(``int` `n) {``    ``// Stores the digits``    ``vector ones {``""``,``"one"``,``"two"``,``"three"``,``"four"``,``"five"``,``"six"``,``"seven"``,``"eight"``,``"nine"``};``    ``vector tens {``""``,``""``,``"twenty"``,``"thirty"``,``"forty"``,``"fifty"``,``"sixty"``,``"seventy"``,``"eighty"``,``"ninety"``};``    ``vector teens {``"ten"``,``"eleven"``,``"twelve"``,``"thirteen"``,``"fourteen"``,``"fifteen"``,``"sixteen"``,``"seventeen"``,``"eighteen"``,``"nineteen"``};` `    ``// Convert a two-digit number to words``    ``auto` `convert_two_digits = [&](``int` `num) {``        ``if` `(num < 10) {``            ``return` `ones[num];``        ``} ``else` `if` `(num < 20) {``            ``return` `teens[num-10];``        ``} ``else` `{``            ``return` `tens[num/10] + (num%10==0 ? ``""` `: ``" "` `+ ones[num%10]);``        ``}``    ``};` `    ``// Convert a three-digit number to words``    ``auto` `convert_three_digits = [&](``int` `num) {``        ``if` `(num < 100) {``            ``return` `convert_two_digits(num);``        ``} ``else` `{``            ``return` `ones[num/100] + ``" hundred"` `+ (num%100==0 ? ``""` `: ``" and "` `+ convert_two_digits(num%100));``        ``}``    ``};` `    ``// Convert a number to words``    ``if` `(n < 100) {``        ``return` `convert_two_digits(n);``    ``} ``else` `if` `(n < 1000) {``        ``return` `convert_three_digits(n);``    ``} ``else` `{``        ``return` `"number out of range"``;``    ``}``}` `// Function to print all the numbers up to n in lexicographical order``void` `print_numbers_in_words(``int` `n) {``    ``// Convert all numbers to words``    ``vector words;``    ``for` `(``int` `i = 1; i <= n; i++) {``        ``words.push_back(number_to_words(i));``    ``}` `    ``// Sort all strings``    ``sort(words.begin(), words.end());` `    ``// Print the words in lexicographical order``    ``for` `(``int` `i = 0; i < words.size(); i++) {``        ``cout << words[i] << ``", "``;``    ``}``}` `// Driver code``int` `main() {``    ``int` `n = 15;``    ``print_numbers_in_words(n);``    ``return` `0;``}`

## Java

 `import` `java.util.Arrays;``public` `class` `NumberToWords {``    ``// Stores the digits``    ``private` `static` `final` `String[] ones = {``""``, ``"one"``, ``"two"``, ``"three"``, ``"four"``, ``"five"``, ``"six"``, ``"seven"``, ``"eight"``, ``"nine"``};``    ``private` `static` `final` `String[] tens = {``""``, ``""``, ``"twenty"``, ``"thirty"``, ``"forty"``, ``"fifty"``, ``"sixty"``, ``"seventy"``, ``"eighty"``, ``"ninety"``};``    ``private` `static` `final` `String[] teens = {``"ten"``, ``"eleven"``, ``"twelve"``, ``"thirteen"``, ``"fourteen"``, ``"fifteen"``, ``"sixteen"``, ``"seventeen"``, ``"eighteen"``, ``"nineteen"``};` `    ``// Convert a two-digit number to words``    ``private` `static` `String convertTwoDigits(``int` `num) {``        ``if` `(num < ``10``) {``            ``return` `ones[num];``        ``} ``else` `if` `(num < ``20``) {``            ``return` `teens[num - ``10``];``        ``} ``else` `{``            ``return` `tens[num / ``10``] + (num % ``10` `== ``0` `? ``""` `: ``" "` `+ ones[num % ``10``]);``        ``}``    ``}` `    ``// Convert a three-digit number to words``    ``private` `static` `String convertThreeDigits(``int` `num) {``        ``if` `(num < ``100``) {``            ``return` `convertTwoDigits(num);``        ``} ``else` `{``            ``return` `ones[num / ``100``] + ``" hundred"` `+ (num % ``100` `== ``0` `? ``""` `: ``" and "` `+ convertTwoDigits(num % ``100``));``        ``}``    ``}` `    ``// Convert a number to words``    ``public` `static` `String convertToWords(``int` `num) {``        ``if` `(num < ``100``) {``            ``return` `convertTwoDigits(num);``        ``} ``else` `if` `(num < ``1000``) {``            ``return` `convertThreeDigits(num);``        ``} ``else` `{``            ``return` `"number out of range"``;``        ``}``    ``}` `    ``// Print all the numbers up to n in lexicographical order``    ``public` `static` `void` `printNumbersInWords(``int` `n) {``        ``// Convert all numbers to words``        ``String[] words = ``new` `String[n];``        ``for` `(``int` `i = ``1``; i <= n; i++) {``            ``words[i - ``1``] = convertToWords(i);``        ``}` `        ``// Sort all strings``        ``Arrays.sort(words);` `        ``// Print the words in lexicographical order``        ``System.out.println(String.join(``", "``, words));``    ``}` `    ``// Driver code``    ``public` `static` `void` `main(String[] args) {``        ``int` `n = ``15``;``        ``printNumbersInWords(n);``    ``}``}`

## Python3

 `# Function to convert a number to words``def` `number_to_words(n):``    ``# Stores the digits``    ``ones ``=` `['``','``one``','``two``','``three``','``four``','``five``','``six``','``seven``','``eight``','``nine']``    ``tens ``=` `['``','``','``twenty``','``thirty``','``forty``','``fifty``','``sixty``','``seventy``','``eighty``','``ninety']``    ``teens ``=` `[``'ten'``,``'eleven'``,``'twelve'``,``'thirteen'``,``'fourteen'``,``'fifteen'``,``'sixteen'``,``'seventeen'``,``'eighteen'``,``'nineteen'``]` `    ``# Convert a two-digit number to words``    ``def` `convert_two_digits(num):``        ``if` `num < ``10``:``            ``return` `ones[num]``        ``elif` `num < ``20``:``            ``return` `teens[num``-``10``]``        ``else``:``            ``return` `tens[num``/``/``10``] ``+` `('``' if num%10==0 else '` `' ``+` `ones[num``%``10``])` `    ``# Convert a three-digit number to words``    ``def` `convert_three_digits(num):``        ``if` `num < ``100``:``            ``return` `convert_two_digits(num)``        ``else``:``            ``return` `ones[num``/``/``100``] ``+` `' hundred'` `+` `('``' if num%100==0 else '` `and` `' ``+` `convert_two_digits(num``%``100``))` `    ``# Convert a number to words``    ``if` `n < ``100``:``        ``return` `convert_two_digits(n)``    ``elif` `n < ``1000``:``        ``return` `convert_three_digits(n)``    ``else``:``        ``return` `'number out of range'` `# Function to print all the numbers up to n in lexicographical order``def` `print_numbers_in_words(n):``    ``# Convert all numbers to words``    ``words``=``[]``    ``for` `i ``in` `range``(``1``, n``+``1``):``      ``words.append(number_to_words(i))` `    ``# Sort all strings``    ``words.sort()` `    ``# Print the words in lexicographical order``    ``print``(``', '``.join(words))` `# Driver code``if` `__name__ ``=``=` `"__main__"``:``    ``n ``=` `15``    ``print_numbers_in_words(n)`

## C#

 `using` `System;``using` `System.Collections.Generic;` `public` `class` `NumberToWords``{``    ``// Stores the digits``    ``private` `static` `readonly` `string``[] Ones = {``""``, ``"one"``, ``"two"``, ``"three"``, ``"four"``, ``"five"``, ``"six"``, ``"seven"``, ``"eight"``, ``"nine"``};``    ``private` `static` `readonly` `string``[] Tens = {``""``, ``""``, ``"twenty"``, ``"thirty"``, ``"forty"``, ``"fifty"``, ``"sixty"``, ``"seventy"``, ``"eighty"``, ``"ninety"``};``    ``private` `static` `readonly` `string``[] Teens = {``"ten"``, ``"eleven"``, ``"twelve"``, ``"thirteen"``, ``"fourteen"``, ``"fifteen"``, ``"sixteen"``, ``"seventeen"``, ``"eighteen"``, ``"nineteen"``};` `    ``// Convert a two-digit number to words``    ``private` `static` `string` `ConvertTwoDigits(``int` `num)``    ``{``        ``if` `(num < 10)``        ``{``            ``return` `Ones[num];``        ``}``        ``else` `if` `(num < 20)``        ``{``            ``return` `Teens[num - 10];``        ``}``        ``else``        ``{``            ``return` `Tens[num / 10] + (num % 10 == 0 ? ``""` `: ``" "` `+ Ones[num % 10]);``        ``}``    ``}` `    ``// Convert a three-digit number to words``    ``private` `static` `string` `ConvertThreeDigits(``int` `num)``    ``{``        ``if` `(num < 100)``        ``{``            ``return` `ConvertTwoDigits(num);``        ``}``        ``else``        ``{``            ``return` `Ones[num / 100] + ``" hundred"` `+ (num % 100 == 0 ? ``""` `: ``" and "` `+ ConvertTwoDigits(num % 100));``        ``}``    ``}` `    ``// Convert a number to words``    ``public` `static` `string` `ConvertNumberToWords(``int` `n)``    ``{``        ``if` `(n < 100)``        ``{``            ``return` `ConvertTwoDigits(n);``        ``}``        ``else` `if` `(n < 1000)``        ``{``            ``return` `ConvertThreeDigits(n);``        ``}``        ``else``        ``{``            ``return` `"number out of range"``;``        ``}``    ``}` `    ``// Print all the numbers up to n in lexicographical order``    ``public` `static` `void` `PrintNumbersInWords(``int` `n)``    ``{``        ``// Convert all numbers to words``        ``List<``string``> words = ``new` `List<``string``>();``        ``for` `(``int` `i = 1; i <= n; i++)``        ``{``            ``words.Add(ConvertNumberToWords(i));``        ``}` `        ``// Sort all strings``        ``words.Sort();` `        ``// Print the words in lexicographical order``        ``Console.WriteLine(``string``.Join(``", "``, words));``    ``}` `    ``// Main method``    ``public` `static` `void` `Main(``string``[] args)``    ``{``        ``int` `n = 15;``        ``PrintNumbersInWords(n);``    ``}``}`

## Javascript

 ``

#### Output:

`eight, eleven, fifteen, five, four, fourteen, nine, one, seven, six, ten, thirteen, three, twelve, two`

Time Complexity: O(NlogN) where N is the given integer.

Auxiliary Space: O(N)

My Personal Notes arrow_drop_up