Programa para convertir un número dado en palabras | conjunto 2

Escribir código para convertir un número dado en palabras.
Ejemplos: 

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"

Ya hemos discutido un enfoque que maneja números del 0 al 9999 en la publicación anterior .
Solución: este enfoque puede manejar números de hasta 20 dígitos que son menores que ULLONG_MAX (valor máximo para un objeto de tipo int largo largo sin signo). ULLONG_MAX es igual a 18446744073709551615 en decimal, suponiendo que el compilador toma 8 bytes para el almacenamiento de int largo largo sin firmar.
La siguiente representación muestra el gráfico de valor posicional para cualquier número entero positivo de 9 dígitos: 
 

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

La idea es dividir el número en dígitos individuales según la tabla de valor posicional anterior y manejarlos comenzando desde el dígito más significativo. Aquí hay una implementación simple que admite números que tienen un máximo de 9 dígitos. El programa se puede ampliar fácilmente para admitir cualquier número de 20 dígitos.
 

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

<?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 is 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
?>

Javascript

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

Producción: 

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

Análisis de Complejidad: 

  • Complejidad temporal: O(1). 
    El bucle se ejecuta durante un tiempo constante.
  • Espacio auxiliar: O(1). 
    Como no se requiere espacio adicional.

Este artículo es una contribución de Aditya Goel . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *