Având în vedere un număr întreg pozitiv, scrieți o funcție care returnează adevărat dacă numărul dat este un palindrom, altfel fals. De exemplu, 12321 este un palindrom, dar 1451 nu este un palindrom.

Practica recomandată Suma cifrelor este palindrom sau nu Încercați!
Metoda 1:
Fie numărul dat pe unu . O metodă simplă pentru această problemă este mai întâi cifre inverse ale pe unu , apoi comparați inversul pe unu cu pe unu . Dacă ambele sunt identice, atunci returnează true, altfel false.
În continuare este o metodă interesantă inspirată din metoda #2 a acest post. Ideea este de a crea o copie a pe unu și treceți recursiv copia prin referință și treceți pe unu după valoare. În apelurile recursive, împărțiți pe unu cu 10 în timp ce vă deplasați în jos în arborele recursiv. În timp ce vă deplasați în sus în arborele recursiv, împărțiți copia la 10. Când se întâlnesc într-o funcție pentru care toate apelurile secundare s-au încheiat, ultima cifră a pe unu va fi a-a cifră de la început și ultima cifră a copiei va fi a-a cifră de la sfârșit.
C++
matrice java dinamică
// A recursive C++ program to check> // whether a given number> // is palindrome or not> #include> using> namespace> std;> > // A function that returns true only> // if num contains one> // digit> int> oneDigit(>int> num)> {> > >// Comparison operation is faster> >// than division> >// operation. So using following> >// instead of 'return num> >// / 10 == 0;'> >return> (num>= 0 && num<10);> }> > // A recursive function to find> // out whether num is> // palindrome or not. Initially, dupNum> // contains address of> // a copy of num.> bool> isPalUtil(>int> num,>int>* dupNum)> {> > >// Base case (needed for recursion> >// termination): This> >// statement mainly compares the> >// first digit with the> >// last digit> >if> (oneDigit(num))> >return> (num == (*dupNum) % 10);> > >// This is the key line in this> >// method. Note that all> >// recursive calls have a separate> >// copy of num, but they> >// all share same copy of *dupNum.> >// We divide num while> >// moving up the recursion tree> >if> (!isPalUtil(num / 10, dupNum))> >return> false>;> > >// The following statements are> >// executed when we move up> >// the recursion call tree> >*dupNum /= 10;> > >// At this point, if num%10 contains> >// i'th digit from> >// beginning, then (*dupNum)%10> >// contains i'th digit> >// from end> >return> (num % 10 == (*dupNum) % 10);> }> > // The main function that uses> // recursive function> // isPalUtil() to find out whether> // num is palindrome or not> int> isPal(>int> num)> {> > >// Check if num is negative,> >// make it positive> >if> (num <0)> >num = -num;> > >// Create a separate copy of num,> >// so that modifications> >// made to address dupNum don't> >// change the input number.> >// *dupNum = num> >int>* dupNum =>new> int>(num);> > >return> isPalUtil(num, dupNum);> }> > // Driver program to test> // above functions> int> main()> {> >int> n = 12321;> >isPal(n) ? cout <<>'Yes
'>: cout <<>'No'> << endl;> > >n = 12;> >isPal(n) ? cout <<>'Yes
'>: cout <<>'No'> << endl;> > >n = 88;> >isPal(n) ? cout <<>'Yes
'>: cout <<>'No'> << endl;> > >n = 8999;> >isPal(n) ? cout <<>'Yes
'>: cout <<>'No'>;> >return> 0;> }> > // this code is contributed by shivanisinghss2110> |
>
>
C
#include> #include> > // A function that returns true only> // if num contains one digit> int> oneDigit(>int> num)> {> >// Comparison operation is faster> >// than division operation.> >// So using the following instead of 'return num / 10 == 0;'> >return> (num>= 0 && num<10);> }> > // A recursive function to find out whether> // num is palindrome or not.> // Initially, dupNum contains the address of a copy of num.> bool> isPalUtil(>int> num,>int>* dupNum)> {> >// Base case (needed for recursion termination):> >// This statement mainly compares the first digit with the last digit.> >if> (oneDigit(num))> >return> (num == (*dupNum) % 10);> > >// This is the key line in this method.> >// Note that all recursive calls have a separate copy of num,> >// but they all share the same copy of *dupNum.> >// We divide num while moving up the recursion tree.> >if> (!isPalUtil(num / 10, dupNum))> >return> false>;> > >// The following statements are executed when we move up the recursion call tree.> >*dupNum /= 10;> > >// At this point, if num % 10 contains the i'th digit from the beginning,> >// then (*dupNum) % 10 contains the i'th digit from the end.> >return> (num % 10 == (*dupNum) % 10);> }> > // The main function that uses the recursive function> // isPalUtil() to find out whether num is palindrome or not.> bool> isPal(>int> num)> {> >// Check if num is negative, make it positive.> >if> (num <0)> >num = -num;> > >// Create a separate copy of num, so that modifications> >// made to the address dupNum don't change the input number.> >int> dupNum = num;> > >return> isPalUtil(num, &dupNum);> }> > // Driver program to test above functions> int> main()> {> >int> n = 12321;> >isPal(n) ?>printf>(>'Yes
'>) :>printf>(>'No
'>);> > >n = 12;> >isPal(n) ?>printf>(>'Yes
'>) :>printf>(>'No
'>);> > >n = 88;> >isPal(n) ?>printf>(>'Yes
'>) :>printf>(>'No
'>);> > >n = 8999;> >isPal(n) ?>printf>(>'Yes
'>) :>printf>(>'No
'>);> > >return> 0;> }> |
>
>
Java
// A recursive Java program to> // check whether a given number> // is palindrome or not> import> java.io.*;> import> java.util.*;> > public> class> CheckPalindromeNumberRecursion {> > >// A function that returns true> >// only if num contains one digit> >public> static> int> oneDigit(>int> num) {> > >if> ((num>=>0>) && (num <>10>))> >return> 1>;> >else> >return> 0>;> >}> > >public> static> int> isPalUtil> >(>int> num,>int> dupNum)>throws> Exception {> > >// base condition to return once we> >// move past first digit> >if> (num ==>0>) {> >return> dupNum;> >}>else> {> >dupNum = isPalUtil(num />10>, dupNum);> >}> > >// Check for equality of first digit of> >// num and dupNum> >if> (num %>10> == dupNum %>10>) {> >// if first digit values of num and> >// dupNum are equal divide dupNum> >// value by 10 to keep moving in sync> >// with num.> >return> dupNum />10>;> >}>else> {> >// At position values are not> >// matching throw exception and exit.> >// no need to proceed further.> >throw> new> Exception();> >}> > >}> > >public> static> int> isPal(>int> num)> >throws> Exception {> > >if> (num <>0>)> >num = (-num);> > >int> dupNum = (num);> > >return> isPalUtil(num, dupNum);> >}> > >public> static> void> main(String args[]) {> > >int> n =>12421>;> >try> {> >isPal(n);> >System.out.println(>'Yes'>);> >}>catch> (Exception e) {> >System.out.println(>'No'>);> >}> >n =>1231>;> >try> {> >isPal(n);> >System.out.println(>'Yes'>);> >}>catch> (Exception e) {> >System.out.println(>'No'>);> >}> > >n =>12>;> >try> {> >isPal(n);> >System.out.println(>'Yes'>);> >}>catch> (Exception e) {> >System.out.println(>'No'>);> >}> > >n =>88>;> >try> {> >isPal(n);> >System.out.println(>'Yes'>);> >}>catch> (Exception e) {> >System.out.println(>'No'>);> >}> > >n =>8999>;> >try> {> >isPal(n);> >System.out.println(>'Yes'>);> >}>catch> (Exception e) {> >System.out.println(>'No'>);> >}> >}> }> > // This code is contributed> // by Nasir J> |
>
>
Python3
# A recursive Python3 program to check> # whether a given number is palindrome or not> > # A function that returns true> # only if num contains one digit> def> oneDigit(num):> > ># comparison operation is faster> ># than division operation. So> ># using following instead of> ># 'return num / 10 == 0;'> >return> ((num>>>>)>and> >(num <>10>))> > # A recursive function to find> # out whether num is palindrome> # or not. Initially, dupNum> # contains address of a copy of num.> def> isPalUtil(num, dupNum):> > ># Base case (needed for recursion> ># termination): This statement> ># mainly compares the first digit> ># with the last digit> >if> oneDigit(num):> >return> (num>=>=> (dupNum[>0>])>%> 10>)> > ># This is the key line in this> ># method. Note that all recursive> ># calls have a separate copy of> ># num, but they all share same> ># copy of *dupNum. We divide num> ># while moving up the recursion tree> >if> not> isPalUtil(num>/>/>10>, dupNum):> >return> False> > ># The following statements are> ># executed when we move up the> ># recursion call tree> >dupNum[>0>]>=> dupNum[>0>]>/>/>10> > ># At this point, if num%10> ># contains i'th digit from> ># beginning, then (*dupNum)%10> ># contains i'th digit from end> >return> (num>%> 10> =>=> (dupNum[>0>])>%> 10>)> > # The main function that uses> # recursive function isPalUtil()> # to find out whether num is> # palindrome or not> def> isPal(num):> ># If num is negative,> ># make it positive> >if> (num <>0>):> >num>=> (>->num)> > ># Create a separate copy of> ># num, so that modifications> ># made to address dupNum> ># don't change the input number.> >dupNum>=> [num]># *dupNum = num> > >return> isPalUtil(num, dupNum)> > # Driver Code> n>=> 12321> if> isPal(n):> >print>(>'Yes'>)> else>:> >print>(>'No'>)> > n>=> 12> if> isPal(n) :> >print>(>'Yes'>)> else>:> >print>(>'No'>)> > n>=> 88> if> isPal(n) :> >print>(>'Yes'>)> else>:> >print>(>'No'>)> > n>=> 8999> if> isPal(n) :> >print>(>'Yes'>)> else>:> >print>(>'No'>)> > # This code is contributed by mits> |
>
>
C#
// A recursive C# program to> // check whether a given number> // is palindrome or not> using> System;> > class> GFG> {> > // A function that returns true> // only if num contains one digit> public> static> int> oneDigit(>int> num)> {> >// comparison operation is> >// faster than division> >// operation. So using> >// following instead of> >// 'return num / 10 == 0;'> >if>((num>= 0) &&(num<10))> >return> 1;> >else> >return> 0;> }> > // A recursive function to> // find out whether num is> // palindrome or not.> // Initially, dupNum contains> // address of a copy of num.> public> static> int> isPalUtil(>int> num,> >int> dupNum)> {> >// Base case (needed for recursion> >// termination): This statement> >// mainly compares the first digit> >// with the last digit> >if> (oneDigit(num) == 1)> >if>(num == (dupNum) % 10)> >return> 1;> >else> >return> 0;> > >// This is the key line in> >// this method. Note that> >// all recursive calls have> >// a separate copy of num,> >// but they all share same> >// copy of *dupNum. We divide> >// num while moving up the> >// recursion tree> >if> (isPalUtil((>int>)(num / 10), dupNum) == 0)> >return> -1;> > >// The following statements> >// are executed when we move> >// up the recursion call tree> >dupNum = (>int>)(dupNum / 10);> > >// At this point, if num%10> >// contains i'th digit from> >// beginning, then (*dupNum)%10> >// contains i'th digit from end> >if>(num % 10 == (dupNum) % 10)> >return> 1;> >else> >return> 0;> }> > // The main function that uses> // recursive function isPalUtil()> // to find out whether num is> // palindrome or not> public> static> int> isPal(>int> num)> {> >// If num is negative,> >// make it positive> >if> (num <0)> >num = (-num);> > >// Create a separate copy> >// of num, so that modifications> >// made to address dupNum> >// don't change the input number.> >int> dupNum = (num);>// *dupNum = num> > >return> isPalUtil(num, dupNum);> }> > // Driver Code> public> static> void> Main()> {> int> n = 12321;> if>(isPal(n) == 0)> >Console.WriteLine(>'Yes'>);> else> >Console.WriteLine(>'No'>);> > n = 12;> if>(isPal(n) == 0)> >Console.WriteLine(>'Yes'>);> else> >Console.WriteLine(>'No'>);> > n = 88;> if>(isPal(n) == 1)> >Console.WriteLine(>'Yes'>);> else> >Console.WriteLine(>'No'>);> > n = 8999;> if>(isPal(n) == 0)> >Console.WriteLine(>'Yes'>);> else> >Console.WriteLine(>'No'>);> }> }> > // This code is contributed by mits> |
>
>
Javascript
> // A recursive javascript program to> // check whether a given number> // is palindrome or not> > >// A function that returns true> >// only if num contains one digit> >function> oneDigit(num) {> > >if> ((num>= 0) && (num<10))> >return> 1;> >else> >return> 0;> >}> > >function> isPalUtil> >(num , dupNum) {> > >// base condition to return once we> >// move past first digit> >if> (num == 0) {> >return> dupNum;> >}>else> {> >dupNum = isPalUtil(parseInt(num / 10), dupNum);> >}> > >// Check for equality of first digit of> >// num and dupNum> >if> (num % 10 == dupNum % 10) {> >// if first digit values of num and> >// dupNum are equal divide dupNum> >// value by 10 to keep moving in sync> >// with num.> >return> parseInt(dupNum / 10);> >}>else> {> >// At position values are not> >// matching throw exception and exit.> >// no need to proceed further.> >throw> e;> >}> > >}> > >function> isPal(num)> >{> > >if> (num <0)> >num = (-num);> > >var> dupNum = (num);> > >return> isPalUtil(num, dupNum);> >}> > > > >var> n = 1242;> >try> {> >isPal(n);> >document.write(>' Yes'>);> >}>catch> (e) {> >document.write(>' No'>);> >}> >n = 1231;> >try> {> >isPal(n);> >document.write(>' Yes'>);> >}>catch> (e) {> >document.write(>' No'>);> >}> > >n = 12;> >try> {> >isPal(n);> >document.write(>' Yes'>);> >}>catch> (e) {> >document.write(>' No'>);> >}> > >n = 88;> >try> {> >isPal(n);> >document.write(>' Yes'>);> >}>catch> (e) {> >document.write(>' No'>);> >}> > >n = 8999;> >try> {> >isPal(n);> >document.write(>' Yes'>);> >}>catch> (e) {> >document.write(>' No'>);> >}> > // This code is contributed by Amit Katiyar> > |
>
>
PHP
// A recursive PHP program to // check whether a given number // is palindrome or not // A function that returns true // only if num contains one digit function oneDigit($num) { // comparison operation is faster // than division operation. So // using following instead of // 'return num / 10 == 0;' return (($num>= 0) && ($num<10)); } // A recursive function to find // out whether num is palindrome // or not. Initially, dupNum // contains address of a copy of num. function isPalUtil($num, $dupNum) { // Base case (needed for recursion // termination): This statement // mainly compares the first digit // with the last digit if (oneDigit($num)) return ($num == ($dupNum) % 10); // This is the key line in this // method. Note that all recursive // calls have a separate copy of // num, but they all share same // copy of *dupNum. We divide num // while moving up the recursion tree if (!isPalUtil((int)($num / 10), $dupNum)) return -1; // The following statements are // executed when we move up the // recursion call tree $dupNum = (int)($dupNum / 10); // At this point, if num%10 // contains i'th digit from // beginning, then (*dupNum)%10 // contains i'th digit from end return ($num % 10 == ($dupNum) % 10); } // The main function that uses // recursive function isPalUtil() // to find out whether num is // palindrome or not function isPal($num) { // If num is negative, // make it positive if ($num <0) $num = (-$num); // Create a separate copy of // num, so that modifications // made to address dupNum // don't change the input number. $dupNum = ($num); // *dupNum = num return isPalUtil($num, $dupNum); } // Driver Code $n = 12321; if(isPal($n) == 0) echo 'Yes
'; else echo 'No
'; $n = 12; if(isPal($n) == 0) echo 'Yes
'; else echo 'No
'; $n = 88; if(isPal($n) == 1) echo 'Yes
'; else echo 'No
'; $n = 8999; if(isPal($n) == 0) echo 'Yes
'; else echo 'No
'; // This code is contributed by m_kit ?>>>> |
>Yes No Yes No>
Complexitatea timpului: O(log n)
Spațiu auxiliar: O(log n)
Verificarea unui număr este sau nu palindrom fără a folosi spațiu suplimentar
Metoda 2: Folosind metoda string().
- Când numărul de cifre ale acelui număr depășește 1018, nu putem lua acel număr ca un întreg, deoarece intervalul long long int nu satisface numărul dat.
- Deci, luați intrarea ca șir, rulați o buclă de la început la lungime/2 și verificați primul caracter (numeric) până la ultimul caracter al șirului și de la al doilea până la ultimul și așa mai departe... Dacă vreun caracter nu se potrivește, șirul nu ar fi un palindrom.
Mai jos este implementarea abordării de mai sus
C++14
// C++ implementation of the above approach> #include> using> namespace> std;> > // Function to check palindrome> int> checkPalindrome(string str)> {> >// Calculating string length> >int> len = str.length();> > >// Traversing through the string> >// upto half its length> >for> (>int> i = 0; i // Comparing i th character // from starting and len-i // th character from end if (str[i] != str[len - i - 1]) return false; } // If the above loop doesn't return then it is // palindrome return true; } // Driver Code int main() { // taking number as string string st = '112233445566778899000000998877665544332211'; if (checkPalindrome(st) == true) cout << 'Yes'; else cout << 'No'; return 0; } // this code is written by vikkycirus> |
>
>
Java
// Java implementation of the above approach> import> java.io.*;> > class> GFG{> > // Function to check palindrome> static> boolean> checkPalindrome(String str)> {> > >// Calculating string length> >int> len = str.length();> > >// Traversing through the string> >// upto half its length> >for>(>int> i =>0>; i 2; i++) { // Comparing i th character // from starting and len-i // th character from end if (str.charAt(i) != str.charAt(len - i - 1)) return false; } // If the above loop doesn't return then // it is palindrome return true; } // Driver Code public static void main(String[] args) { // Taking number as string String st = '112233445566778899000000998877665544332211'; if (checkPalindrome(st) == true) System.out.print('Yes'); else System.out.print('No'); } } // This code is contributed by subhammahato348> |
>
>
Python3
# Python3 implementation of the above approach> > # function to check palindrome> def> checkPalindrome(>str>):> > ># Run loop from 0 to len/2> >for> i>in> range>(>0>,>len>(>str>)>/>/>2>):> >if> str>[i] !>=> str>[>len>(>str>)>->i>->1>]:> >return> False> > ># If the above loop doesn't> >#return then it is palindrome> >return> True> > > # Driver code> st>=> '112233445566778899000000998877665544332211'> if>(checkPalindrome(st)>=>=> True>):> >print>(>'it is a palindrome'>)> else>:> >print>(>'It is not a palindrome'>)> |
>
>
C#
comenzi linux care
// C# implementation of the above approach> using> System;> > class> GFG{> > // Function to check palindrome> static> bool> checkPalindrome(>string> str)> {> > >// Calculating string length> >int> len = str.Length;> > >// Traversing through the string> >// upto half its length> >for>(>int> i = 0; i { // Comparing i th character // from starting and len-i // th character from end if (str[i] != str[len - i - 1]) return false; } // If the above loop doesn't return then // it is palindrome return true; } // Driver Code public static void Main() { // Taking number as string string st = '112233445566778899000000998877665544332211'; if (checkPalindrome(st) == true) Console.Write('Yes'); else Console.Write('No'); } } // This code is contributed by subhammahato348> |
>
>
Javascript
> > // Javascript implementation of the above approach> > // Function to check palindrome> function> checkPalindrome(str)> {> >// Calculating string length> >var> len = str.length;> > >// Traversing through the string> >// upto half its length> >for> (>var> i = 0; i // Comparing ith character // from starting and len-ith // character from end if (str[i] != str[len - i - 1]) return false; } // If the above loop doesn't return then it is // palindrome return true; } // Driver Code // taking number as string let st = '112233445566778899000000998877665544332211'; if (checkPalindrome(st) == true) document.write('Yes'); else document.write('No'); // This code is contributed by Mayank Tyagi> |
>
>Ieșire
Yes>
Complexitatea timpului: O(|str|)
Spațiu auxiliar : O(1)
Metoda 3:
Iată cea mai simplă abordare pentru a verifica dacă un număr este sau nu Palindrom. Această abordare poate fi utilizată atunci când numărul de cifre din numărul dat este mai mic de 10^18, deoarece dacă numărul de cifre ale acelui număr depășește 10^18, nu putem lua acel număr ca număr întreg, deoarece intervalul de lung long int nu satisface numărul dat.
Pentru a verifica dacă numărul dat este sau nu palindrom, vom inversa doar cifrele numărului dat și vom verifica dacă reversul acelui număr este egal cu numărul inițial sau nu. Dacă reversul numărului este egal cu acel număr, atunci numărul va fi Palindrom, altfel nu va fi Palindrom.
C++
// C++ program to check if a number is Palindrome> #include> using> namespace> std;> // Function to check Palindrome> bool> checkPalindrome(>int> n)> {> >int> reverse = 0;> >int> temp = n;> >while> (temp != 0) {> >reverse = (reverse * 10) + (temp % 10);> >temp = temp / 10;> >}> >return> (reverse> >== n);>// if it is true then it will return 1;> >// else if false it will return 0;> }> int> main()> {> >int> n = 7007;> >if> (checkPalindrome(n) == 1) {> >cout <<>'Yes
'>;> >}> >else> {> >cout <<>'No
'>;> >}> >return> 0;> }> // This code is contributed by Suruchi Kumari> |
>
>
Java
/*package whatever //do not write package name here */> > import> java.io.*;> > class> GFG {> >// Java program to check if a number is Palindrome> > >// Function to check Palindrome> >static> boolean> checkPalindrome(>int> n)> >{> >int> reverse =>0>;> >int> temp = n;> >while> (temp !=>0>) {> >reverse = (reverse *>10>) + (temp %>10>);> >temp = temp />10>;> >}> >return> (reverse == n);>// if it is true then it will return 1;> >// else if false it will return 0;> >}> > >// Driver Code> >public> static> void> main(String args[])> >{> >int> n =>7007>;> >if> (checkPalindrome(n) ==>true>) {> >System.out.println(>'Yes'>);> >}> >else> {> >System.out.println(>'No'>);> >}> >}> }> > // This code is contributed by shinjanpatra> |
>
>
Python3
# Python3 program to check if a number is Palindrome> > # Function to check Palindrome> def> checkPalindrome(n):> > >reverse>=> 0> >temp>=> n> >while> (temp !>=> 0>):> >reverse>=> (reverse>*> 10>)>+> (temp>%> 10>)> >temp>=> temp>/>/> 10> > >return> (reverse>=>=> n)># if it is true then it will return 1;> ># else if false it will return 0;> > # driver code> n>=> 7007> if> (checkPalindrome(n)>=>=> 1>):> >print>(>'Yes'>)> > else>:> >print>(>'No'>)> > # This code is contributed by shinjanpatra> |
>
>
C#
// C# program to check if a number is Palindrome> > using> System;> > class> GFG {> > >// Function to check Palindrome> >static> bool> checkPalindrome(>int> n)> >{> >int> reverse = 0;> >int> temp = n;> >while> (temp != 0) {> >reverse = (reverse * 10) + (temp % 10);> >temp = temp / 10;> >}> >return> (> >reverse> >== n);>// if it is true then it will return 1;> >// else if false it will return 0;> >}> > >// Driver Code> >public> static> void> Main(>string>[] args)> >{> >int> n = 7007;> >if> (checkPalindrome(n) ==>true>) {> >Console.WriteLine(>'Yes'>);> >}> >else> {> >Console.WriteLine(>'No'>);> >}> >}> }> > // This code is contributed by phasing17> |
>
>
Javascript
> > // JavaScript program to check if a number is Palindrome> > // Function to check Palindrome> function> checkPalindrome(n)> {> >let reverse = 0;> >let temp = n;> >while> (temp != 0) {> >reverse = (reverse * 10) + (temp % 10);> >temp = Math.floor(temp / 10);> >}> >return> (reverse == n);>// if it is true then it will return 1;> >// else if false it will return 0;> }> > // driver code> > let n = 7007;> if> (checkPalindrome(n) == 1) {> >document.write(>'Yes'>,>''>);> }> else> {> >document.write(>'No'>,>''>);> }> > > // This code is contributed by shinjanpatra> > > |
>
număr aleator între 1 și 10
>Ieșire
Yes>
Complexitatea timpului: O (log10(n)) sau O (Numărul de cifre dintr-un număr dat)
Spațiu auxiliar : O(1) sau constantă
Acest articol este compilat deAshish Barnwal.