Programma per convertire un dato numero in parole | Insieme 2

Programma per convertire un dato numero in parole | Insieme 2
Provalo su GfG Practice #practiceLinkDiv { display: none! importante; }

Scrivi il codice per convertire un dato numero in parole.

Esempi:  

Ingresso: 438237764
Produzione: quarantatre crore ottantadue lakh trentasettemilasettecentosessantaquattro

Ingresso: 999999
Produzione: nove lakh novantanovemilanovecentonovantanove

Ingresso: 1000
Produzione: mille
Spiegazione: 1000 in parole è "mille"

Pratica consigliata Da intero a parole Provalo!

Abbiamo già discusso un approccio che gestisce i numeri da 0 a 9999 nel file precedente inviare.

Soluzione: Questo approccio può gestire numeri fino a 20 cifre inferiori a ULLONG_MAX (Valore massimo per un oggetto di tipo unsigned long long int). ULLONG_MAX è uguale a 18446744073709551615 in decimale presupponendo che il compilatore richieda 8 byte per l'archiviazione di unsigned long long int.

La rappresentazione seguente mostra il grafico del valore posizionale per qualsiasi intero positivo di 9 cifre: 

 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

L'idea è di dividere il numero in singole cifre in base alla tabella dei valori posizionali sopra e gestirle partendo dalla cifra più significativa.

Ecco una semplice implementazione che supporta numeri con un massimo di 9 cifre. Il programma può essere facilmente esteso per supportare qualsiasi numero di 20 cifre.

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

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

Analisi della complessità:  

  • Complessità temporale: O(1). 
    Il ciclo viene eseguito per un periodo di tempo costante.
  • Spazio ausiliario: O(1). 
    Poiché non è richiesto spazio aggiuntivo.