Dado un entero ‘x’, escriba una función C que devuelva verdadero si la representación binaria de x es un palíndromo; de lo contrario, devuelva falso.
Por ejemplo, un número con representación binaria como 10..01 es palíndromo y un número con representación binaria como 10..00 no es palíndromo.
La idea es similar a comprobar si una string es palíndromo o no . Comenzamos con los bits más a la izquierda y más a la derecha y comparamos los bits uno por uno. Si encontramos una falta de coincidencia, devuelve falso.
Método n. ° 1: seguimos la siguiente lógica para verificar que el binario del número sea Palindrome o no:
- Encuentre el número de bits en x usando el operador sizeof().
- Inicialice las posiciones izquierda y derecha como 1 y n respectivamente.
- Haz lo siguiente mientras que la ‘l’ izquierda es más pequeña que la ‘r’ derecha.
- Si el bit en la posición ‘l’ no es el mismo que el bit en la posición ‘r’, devuelve falso.
- Incremente ‘l’ y disminuya ‘r’, es decir, haga l++ y r–-.
- Si llegamos aquí, significa que no encontramos un bit que no coincida.
- Para encontrar el bit en una posición dada, podemos usar la idea similar a esta publicación. La expresión “ x & (1 << (k-1)) ” nos da un valor distinto de cero si se establece el bit en la k-ésima posición desde la derecha y da un valor cero si no se establece el k-ésimo bit.
A continuación se muestra la implementación del algoritmo anterior.
C++
// C++ Program to Check if binary representation // of a number is palindrome #include<iostream> using namespace std; // This function returns true if k'th bit in x // is set (or 1). For example if x (0010) is 2 // and k is 2, then it returns true bool isKthBitSet(unsigned int x, unsigned int k) { return (x & (1 << (k - 1))) ? true : false; } // This function returns true if binary // representation of x is palindrome. // For example (1000...001) is palindrome bool isPalindrome(unsigned int x) { int l = 1; // Initialize left position int r = sizeof(unsigned int) * 8; // initialize right position // One by one compare bits while (l < r) { if (isKthBitSet(x, l) != isKthBitSet(x, r)) return false; l++; r--; } return true; } // Driver Code int main() { unsigned int x = 1 << 15 + 1 << 16; cout << isPalindrome(x) << endl; x = 1 << 31 + 1; cout << isPalindrome(x) << endl; return 0; }
Java
// Java Program to Check if binary representation // of a number is palindrome class GFG { // This function returns true if k'th bit in x // is set (or 1). For example if x (0010) is 2 // and k is 2, then it returns true static int isKthBitSet(long x, long k) { int rslt = ((x & (1 << (k - 1))) != 0) ? 1 : 0; return rslt; } // This function returns true if binary // representation of x is palindrome. // For example (1000...001) is palindrome static int isPalindrome( long x) { long l = 1; // Initialize left position long r = (Integer.SIZE/8 )* 8; // initialize right position // One by one compare bits while (l < r) { if (isKthBitSet(x, l) != isKthBitSet(x, r)) { return 0; } l++; r--; } return 1; } // Driver Code public static void main (String[] args) { long x = 1 << 15 + 1 << 16 ; System.out.println(isPalindrome(x)); x = (1 << 31) + 1 ; System.out.println(isPalindrome(x)); } } // This code is contributed by AnkitRai01
Python3
# python 3 Program to Check if binary representation # of a number is palindrome import sys # This function returns true if k'th bit in x # is set (or 1). For example if x (0010) is 2 # and k is 2, then it returns true def isKthBitSet(x, k): if ((x & (1 << (k - 1))) !=0): return True else: return False # This function returns true if binary # representation of x is palindrome. # For example (1000...001) is palindrome def isPalindrome(x): l = 1 # Initialize left position r = 2 * 8 # initialize right position # One by one compare bits while (l < r): if (isKthBitSet(x, l) != isKthBitSet(x, r)): return False l += 1 r -= 1 return True # Driver Code if __name__ =='__main__': x = 1 << 15 + 1 << 16 print(int(isPalindrome(x))) x = 1 << 31 + 1 print(int(isPalindrome(x))) # This code is contributed by # Surendra_Gangwar
C#
// C# Program to Check if binary representation // of a number is palindrome using System; class GFG { // This function returns true if k'th bit in x // is set (or 1). For example if x (0010) is 2 // and k is 2, then it returns true static int isKthBitSet(long x, long k) { int rslt = ((x & (1 << (int)(k - 1))) != 0) ? 1 : 0; return rslt; } // This function returns true if binary // representation of x is palindrome. // For example (1000...001) is palindrome static int isPalindrome( long x) { long l = 1; // Initialize left position long r = 4 * 8; // initialize right position // One by one compare bits while (l < r) { if (isKthBitSet(x, l) != isKthBitSet(x, r)) { return 0; } l++; r--; } return 1; } // Driver Code public static void Main () { long x = 1 << 15 + 1 << 16 ; Console.WriteLine(isPalindrome(x)); x = (1 << 31) + 1 ; Console.WriteLine(isPalindrome(x)); } } // This code is contributed by AnkitRai01
PHP
<?php // PHP Program to Check if binary representation // of a number is palindrome // This function returns true if k'th bit in x // is set (or 1). For example if x (0010) is 2 // and k is 2, then it returns true function isKthBitSet($x, $k) { return ($x & (1 << ($k - 1))) ? true : false; } // This function returns true if binary // representation of x is palindrome. // For example (1000...001) is palindrome function isPalindrome($x) { $l = 1; // Initialize left position $r = sizeof(4) * 8; // initialize right position // One by one compare bits while ($l < $r) { if (isKthBitSet($x, $l) != isKthBitSet($x, $r)) return false; $l++; $r--; } return true; } // Driver Code $x = 1 << 15 + 1 << 16; echo isPalindrome($x), "\n"; $x = 1 << 31 + 1; echo isPalindrome($x), "\n"; // This code is contributed by ajit. ?>
Javascript
<script> // Javascript program to Check if binary // representation of a number is palindrome // This function returns true if k'th bit in x // is set (or 1). For example if x (0010) is 2 // and k is 2, then it returns true function isKthBitSet(x, k) { let rslt = ((x & (1 << (k - 1))) != 0) ? 1 : 0; return rslt; } // This function returns true if binary // representation of x is palindrome. // For example (1000...001) is palindrome function isPalindrome(x) { // Initialize left position let l = 1; // initialize right position let r = 4 * 8; // One by one compare bits while (l < r) { if (isKthBitSet(x, l) != isKthBitSet(x, r)) { return 0; } l++; r--; } return 1; } // Driver code let x = 1 << 15 + 1 << 16; document.write(isPalindrome(x) + "</br>"); x = (1 << 31) + 1; document.write(isPalindrome(x)); // This code is contributed by divyesh072019 </script>
Producción:
1 1
Complejidad del Tiempo: O(x)
Espacio Auxiliar: O(1)
Método #2: Usando la función inversa():
- Cuando el usuario ingresa un número entero, se pasa al método que evaluará el resultado.
- La lógica real dentro del método se centra en lo siguiente:
- Primero convierte el número entero a la forma binaria del número entero en formato de string.
- Invierte la string usando el método inverso.
- Es palíndromo si ambas cuerdas son iguales, de lo contrario no.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program to to check if binary representation // of a number is palindrome #include <bits/stdc++.h> using namespace std; // This function return the binary form of integer in string format string bin(unsigned n) { string ans; while(n > 0){ ans = (to_string(n&1)) + ans; n >>= 1; } return ans; } // This function returns true if binary // representation of x is palindrome bool checkPalindrome( unsigned int n){ string s1 = bin(n); string s2 = s1; // reversing the string 1 reverse(s2.begin(), s2.end()); return s1 == s2; } // Driver code int main() { unsigned int x = 1 << 15 + 1 << 16; cout << checkPalindrome(x) << endl; x = 10; cout << checkPalindrome(x) << endl; return 0; }
Java
// Java program to to check if binary representation // of a number is palindrome class GFG { // This function return the binary form of integer in string format static String bin(int n) { String ans = ""; while(n > 0){ ans = (Integer.toString(n&1)) + ans; n >>= 1; } return ans; } // This function returns true if binary // representation of x is palindrome static int checkPalindrome(int n){ String s1 = bin(n); // reversing the string 1 StringBuilder s2 = new StringBuilder(s1); s2 = s2.reverse(); return s1.equals(s2.toString()) ? 1 : 0; } public static void main(String[] args) { int x = 9; System.out.println(checkPalindrome(x)); x = 10; System.out.println(checkPalindrome(x)); } } // This code is contributed by phasing17.
Python
def bin(n): ans=""; while n > 0: ans = (str(n&1)) + ans; n >>= 1; return ans; def checkPalindrome(x): s1 = bin(x) s2 = s1[::-1] return 1 if s1 == s2 else 0 # Some test cases.... x = 9; print(checkPalindrome(x)) # output 1 x = 10 print(checkPalindrome(x)) # output 0
C#
// C# program to to check if binary representation // of a number is palindrome using System; public class GFG { // This function returns the binary form of integer in // string format static string bin(int n) { string ans = ""; while (n > 0) { ans = (Convert.ToString(n & 1)) + ans; n >>= 1; } return ans; } // This function returns true if binary // representation of x is palindrome static int checkPalindrome(int n) { string s1 = bin(n); // reversing the string 1 char[] charArray = s1.ToCharArray(); Array.Reverse(charArray); string s2 = new string(charArray); return s1.Equals(s2) ? 1 : 0; } // Driver Code public static void Main(string[] args) { int x = 9; Console.WriteLine(checkPalindrome(x)); x = 10; Console.WriteLine(checkPalindrome(x)); } } // This code is contributed by phasing17.
Javascript
// JavaScript program to to check if binary representation // of a number is palindrome // This function return the binary form of integer in string format function bin(n) { let ans=""; while(n > 0){ ans = ((n&1).toString()) + ans; n >>= 1; } return ans; } // This function returns true if binary // representation of x is palindrome function checkPalindrome(x){ let s1 = bin(x); // reversing the string s1 let s2 = s1.split("").reverse().join(""); return s1 === s2 ? 1 :0; } // Some test case let x = 1 << 15 + 1 << 16 ; console.log(checkPalindrome(x)); x = 10; console.log(checkPalindrome(x));
1 0
Complejidad del tiempo: O(log(x))
Espacio Auxiliar: O(1)
Este artículo es una contribución de Saurabh Gupta . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA