📌  相关文章
📜  检查数字的二进制表示形式是否是回文

📅  最后修改于: 2021-04-27 17:30:06             🧑  作者: Mango

给定一个整数“ x”,编写一个C函数,如果x的二进制表示是回文,则返回true,否则返回false。
例如,二进制表示为10..01的数字是回文,二进制表示为10..00的数字不是回文。
这个想法类似于检查字符串是否为回文。我们从最左边和最右边的位开始,并逐位比较位。如果发现不匹配,则返回false。

算法:
isPalindrome(x)
1)使用sizeof()运算符查找x中的位数。
2)分别将左位置和右位置初始化为1和n。
3)在左“ l”小于右“ r”时进行跟随。
..…..a)如果位置“ l”处的位与位置“ r”处的位不同,则返回false。
..…..b)递增“ l”和递减“ r”,即,执行l ++和r–。
4)如果我们到达这里,则意味着我们没有找到不匹配的位。
为了找到给定位置的钻头,我们可以使用类似于本文的想法。如果设置了从右起第k个位置的位,则表达式“ x&(1 <<(k-1)) ”给出非零值;如果未设置第k个位,则表达式为零。

以下是上述算法的实现。

C++
// C++ Program to Check if binary representation
// of a number is palindrome
#include
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 paldindrome
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 paldindrome
    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 paldindrome
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 paldindrome
    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


Javascript


输出:

1
1