Comprobar si la representación binaria de un número es palíndromo

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));
Producción

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *