Programma, lai konvertētu doto numuru uz vārdiem | 2. komplekts

Programma, lai konvertētu doto numuru uz vārdiem | 2. komplekts
Izmēģiniet to GFG praksē #practicelinkdiv {displejs: nav! Svarīgs; }

Rakstiet kodu, lai konvertētu norādīto numuru vārdos.

Piemēri:  

Ievade: 438237764
Izlaide: Četrdesmit trīs kronu astoņdesmit divi lakh trīsdesmit septiņi tūkstoši septiņi simti sešdesmit četri

Ievade: 999999
Izlaide: Deviņi lakh deviņdesmit deviņi tūkstoši deviņi simti deviņdesmit deviņi

Ievade: 1000
Izlaide: tūkstotis
Paskaidrojums: 1000 vārdos ir "tūkstotis"

Ieteicamā prakse Vesels skaitlis vārdiem Izmēģiniet!

Mēs jau esam apsprieduši pieeju, kas apstrādā numurus no 0 līdz 9999 iepriekšējs post.

Risinājums: Šī pieeja var apstrādāt skaitli līdz 20 cipariem, kas ir mazāki par Ullong_max (Maksimālā vērtība tipa neparakstīta ilgstoša int) objektam. Ullong_max ir vienāds ar 18446744073709551615 decimālā, pieņemot, ka kompilators prasa 8 baitus neparakstīta gara ilga int.

Zemāk attēlojums parāda vietas vērtības diagrammu jebkuram 9 ciparos pozitīvu veselu skaitli: 

 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

Ideja ir sadalīt skaitli atsevišķos ciparos, pamatojoties uz iepriekš minēto vietas vērtību diagrammu, un apstrādāt tos, sākot no nozīmīgākā cipara.

Šeit ir vienkārša ieviešana, kas atbalsta skaitļus, kuru maksimāli ir 9 cipari. Programmu var viegli paplašināt, lai atbalstītu jebkuru 20 ciparu numuru.

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

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

Sarežģītības analīze:  

  • Laika sarežģītība: O (1). 
    Cilpa darbojas pastāvīgi daudz laika.
  • Papildu telpa: O (1). 
    Jo nav nepieciešama papildu vieta.