Program konwertujący podaną liczbę na słowa | Zestaw 2
#practiceLinkDiv { display: none !important; } Napisz kod konwertujący podaną liczbę na słowa.
Przykłady:
Zalecana praktyka Liczba całkowita na słowa Spróbuj!Wejście: 438237764
Wyjście: czterdzieści trzy crore osiemdziesiąt dwa lakh trzydzieści siedem tysięcy siedemset sześćdziesiąt czteryWejście: 999999
Wyjście: dziewięć lakh dziewięćdziesiąt dziewięć tysięcy dziewięćset dziewięćdziesiąt dziewięćWejście: 1000
Wyjście: tysiąc
Wyjaśnienie: 1000 słownie to „tysiąc”
Omówiliśmy już podejście, które obsługuje liczby od 0 do 9999 w pliku poprzedni post.
Rozwiązanie: To podejście może obsłużyć liczby o długości do 20 cyfr, które są krótsze niż ULLONG_MAX (Maksymalna wartość dla obiektu typu unsigned long long int). ULLONG_MAX jest równe 18446744073709551615 w formacie dziesiętnym, zakładając, że kompilator zajmuje 8 bajtów do przechowywania unsigned long long int.
Poniższa reprezentacja przedstawia wykres wartości miejsca dla dowolnej 9-cyfrowej dodatniej liczby całkowitej:
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
Pomysł polega na podzieleniu liczby na poszczególne cyfry w oparciu o powyższy wykres wartości miejsca i obsłudze ich, zaczynając od najważniejszej cyfry.
Oto prosta implementacja, która obsługuje liczby mające maksymalnie 9 cyfr. Program można łatwo rozszerzyć o obsługę dowolnej liczby 20-cyfrowej.
C++Java/* 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 */ #includeusing 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 ; } Python3/* 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 )); } }C## 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 mitsJavaScript/* 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 mitsPHP< 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 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 ?>
Wyjścieforty three crore eighty two lakh thirty seven thousand seven hundred and sixty fourAnaliza złożoności:
- Złożoność czasowa: O(1).
Pętla działa przez stałą ilość czasu. - Przestrzeń pomocnicza: O(1).
Ponieważ nie jest wymagana dodatkowa przestrzeń.