Programma om een ​​bepaald getal naar woorden te converteren | Stel 2 in

Programma om een ​​bepaald getal naar woorden te converteren | Stel 2 in
Probeer het eens op GfG Practice #practiceLinkDiv {weergave: geen! belangrijk; }

Schrijf code om een ​​bepaald getal in woorden om te zetten.

Voorbeelden:  

Invoer: 438237764
Uitgang: drieënveertig crore tweeëntachtig lakh zevenendertigduizend zevenhonderdvierenzestig

Invoer: 999999
Uitgang: negen lakh negenennegentigduizend negenhonderdnegenennegentig

Invoer: 1000
Uitgang: duizend
Uitleg: 1000 in woorden is 'duizend'

Aanbevolen praktijk Geheel getal naar woorden Probeer het!

We hebben al een aanpak besproken die getallen van 0 tot 9999 verwerkt in de vorig na.

Oplossing: Deze aanpak kan getallen tot 20 cijfers verwerken, die kleiner zijn dan ULLONG_MAX (Maximumwaarde voor een object van het type unsigned long long int). ULLONG_MAX is gelijk aan 18446744073709551615 in decimalen, ervan uitgaande dat de compiler 8 bytes nodig heeft voor de opslag van niet-ondertekende lange lange int.

De onderstaande weergave toont een plaatswaardegrafiek voor elk positief geheel getal van 9 cijfers: 

 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

Het idee is om het getal in afzonderlijke cijfers te verdelen op basis van de bovenstaande plaatswaardegrafiek en deze te behandelen vanaf het meest significante cijfer.

Hier is een eenvoudige implementatie die getallen ondersteunt met maximaal 9 cijfers. Het programma kan eenvoudig worden uitgebreid om elk 20-cijferig nummer te ondersteunen.

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

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

Complexiteitsanalyse:  

  • Tijdcomplexiteit: O(1). 
    De lus loopt gedurende een constante tijd.
  • Hulpruimte: O(1). 
    Omdat er geen extra ruimte nodig is.