Рубрики

Проверьте, является ли двоичное представление числа палиндромом

Получив целое число «x», напишите функцию C, которая возвращает true, если двоичное представление x — палиндром, иначе возвращает false.

Например, числа с двоичным представлением как 10..01 являются палиндромом, а числа с двоичным представлением как 10..00 не являются палиндромом.

Идея проверки строки похожа на палиндром или нет . Мы начинаем с самых левых и самых правых битов и сравниваем биты один за другим. Если мы обнаружим несоответствие, вернем false.

Алгоритм:
isPalindrome (х)
1) Найдите количество бит в х, используя оператор sizeof ().
2) Инициализируйте левую и правую позиции как 1 и n соответственно.
3) Следуйте, пока левый «l» меньше правого «r».
..… ..a) Если бит в позиции 'l' не совпадает с битом в позиции 'r', вернуть false.
..… ..b) Увеличивайте «l» и уменьшайте «r», т. Е. Делайте l ++ и r–-.
4) Если мы достигаем здесь, это означает, что мы не нашли несоответствующий бит.

Чтобы найти бит в заданной позиции, мы можем использовать идею, аналогичную этой статье. Выражение « x & (1 << (k-1)) » дает нам ненулевое значение, если бит в k-й позиции справа установлен, и дает нулевое значение, если k-й бит не установлен.

Ниже приведена реализация вышеуказанного алгоритма.

C / C ++

// Программа на C ++ для проверки бинарного представления
// числа - палиндром
#include<iostream>

using namespace std;

  
// Эта функция возвращает true, если k-й бит в x
// установлен (или 1). Например, если x (0010) равно 2
// и k равно 2, тогда он возвращает true

bool isKthBitSet(unsigned int x, unsigned int k)

{

    return (x & (1 << (k - 1))) ? true : false;

}

  
// Эта функция возвращает true, если двоичный
// представление х является палиндромом.
// Например (1000 ... 001) это палдиндром

bool isPalindrome(unsigned int x)

{

    int l = 1; // Инициализируем левую позицию

    int r = sizeof(unsigned int) * 8; // инициализируем правильную позицию

  

    // один за другим сравниваем биты

    while (l < r)

    {

        if (isKthBitSet(x, l) != isKthBitSet(x, r))

            return false;

        l++; r--;

    }

    return true;

}

  
// Код драйвера

int main()

{

    unsigned int x = 1 << 15 + 1 << 16;

    cout << isPalindrome(x) << endl;

    x = 1 << 31 + 1;

    cout << isPalindrome(x) << endl;

    return 0;

}

python3

# python 3 Программа для проверки бинарного представления
№ числа - палиндром

import sys

# Эта функция возвращает true, если k-й бит в x
# установлен (или 1). Например, если x (0010) равно 2
# и k равно 2, тогда он возвращает true

def isKthBitSet(x, k):

    if ((x & (1 << (k - 1))) !=0):

        return True

    else:

        return False

  
# Эта функция возвращает true, если двоичный
# представление x - палиндром.
# Например (1000 ... 001) это палдиндром

def isPalindrome(x):

    l = 1 # Инициализировать левую позицию

    r = 2 * 8 # инициализировать правильную позицию

  

    # Один за другим сравнить биты

    while (l < r):

        if (isKthBitSet(x, l) != isKthBitSet(x, r)):

            return False

        l += 1

        r -= 1

      

    return True

  
Код водителя

if __name__ =='__main__':

    x = 1 << 15 + 1 << 16

    print(int(isPalindrome(x)))

    x = 1 << 31 + 1

    print(int(isPalindrome(x)))

  
# Этот код предоставлен
# Surendra_Gangwar

PHP

<?php
// Программа PHP для проверки бинарного представления
// числа - палиндром

  
// Эта функция возвращает true, если k-й бит в x
// установлен (или 1). Например, если x (0010) равно 2
// и k равно 2, тогда он возвращает true

function isKthBitSet($x, $k)

{

    return ($x & (1 << ($k - 1))) ? true : false;

}

  
// Эта функция возвращает true, если двоичный
// представление х является палиндромом.
// Например (1000 ... 001) это палдиндром

function isPalindrome($x)

{

    $l = 1; // Инициализируем левую позицию

    $r = sizeof(4) * 8; // инициализируем правильную позицию

  

    // один за другим сравниваем биты

    while ($l < $r)

    {

        if (isKthBitSet($x, $l) != isKthBitSet($x, $r))

            return false;

        $l++; 

        $r--;

    }

    return true;

}

  
// Код драйвера

$x = 1 << 15 + 1 << 16;

echo isPalindrome($x), "\n";

$x = 1 << 31 + 1;

echo isPalindrome($x), "\n";

  
// Этот код предоставлен ajit.
?>


Выход:

1
1

Эта статья предоставлена Саурабх Гуптой . Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Проверьте, является ли двоичное представление числа палиндромом

0.00 (0%) 0 votes