logo

Comprova si un número és Palíndrom

Donat un nombre enter positiu, escriviu una funció que retorni cert si el nombre donat és un palíndrom, en cas contrari, fals. Per exemple, 12321 és un palíndrom, però 1451 no és un palíndrom.

Pràctica recomanada La suma de dígits és pal·líndrom o no Proveu-ho!

Mètode 1:



Sigui el nombre donat en una . Un mètode senzill per a aquest problema és primer dígits inversos de en una , després compareu el revés de en una amb en una . Si tots dos són iguals, retorna vertader, sinó fals.

El següent és un mètode interessant inspirat en el mètode #2 de això publicació. La idea és crear-ne una còpia en una i passa recursivament la còpia per referència i passa en una per valor. En les trucades recursives, divideix en una per 10 mentre baixeu per l'arbre de recursivitat. Mentre us moveu cap amunt per l'arbre de recursivitat, divideix la còpia per 10. Quan es troben en una funció per a la qual s'han acabat totes les crides secundàries, l'últim dígit de en una serà el dígit del principi i l'últim dígit de la còpia serà el dígit des del final.

C++




// 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 && núm<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>

cadena de llista java
>

>

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 && núm<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>

>

>

Python 3




# 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>>=> 0>)>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) &&(núm<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) && (núm<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) && ($núm<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 ?>>

executa l'intèrpret d'ordres de l'script

>

>

Sortida

Yes No Yes No>

Complexitat temporal: O(log n)
Espai auxiliar: O(log n)

Comprovar un número és palíndrom o no sense utilitzar cap espai addicional
Mètode 2: utilitzant el mètode string().

  • Quan el nombre de dígits d'aquest nombre supera els 1018, no podem prendre aquest nombre com un nombre enter ja que el rang de long long int no satisfà el nombre donat.
  • Per tant, preneu l'entrada com a cadena, executeu un bucle des de l'inici fins a la longitud/2 i comproveu el primer caràcter (numèric) fins a l'últim caràcter de la cadena i del segon fins al darrer, i així successivament... Si algun caràcter no coincideix, la cadena no seria un palíndrom.

A continuació es mostra la implementació de l'enfocament anterior

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>

>

>

dibuix de rectangle gimp

Python 3




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




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

>

>

Sortida

Yes>

Complexitat temporal: O(|str|)
Espai Auxiliar : O(1)

Mètode 3:

Aquí teniu l'enfocament més senzill per comprovar si un número és Palíndrom o no. Aquest enfocament es pot utilitzar quan el nombre de dígits del nombre donat és inferior a 10^18 perquè si el nombre de dígits d'aquest nombre supera els 10^18, no podem prendre aquest nombre com un nombre enter ja que el rang de llarg int no compleix el nombre donat.

Per comprovar si el nombre donat és palíndrom o no, només invertirem els dígits del número donat i comprovarem si el revers d'aquest número és igual al nombre original o no. Si el revés del nombre és igual a aquest nombre, el nombre serà Palíndrom, sinó no serà un Palíndrom.

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

usos del sistema operatiu




/*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>

>

>

Python 3




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




java convertint nombre enter en cadena

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

>

>

Sortida

Yes>

Complexitat temporal: O (log10(n)) o O (Nombre de dígits en un nombre determinat)
Espai auxiliar : O(1) o constant

Aquest article està compilat perAshish Barnwal.