如何检查整数的二进制表示形式是否是回文?

问题描述 投票:7回答:16

如何检查整数的二进制表示形式是否是回文?

c++ c binary integer palindrome
16个回答
11
投票

由于您尚未指定执行操作所用的语言,所以这里有一些C代码(不是最有效的实现,但应该说明这一点:]]

/* flip n */
unsigned int flip(unsigned int n)
{
    int i, newInt = 0;
    for (i=0; i<WORDSIZE; ++i)
    {
        newInt += (n & 0x0001);
        newInt <<= 1;
        n >>= 1;
    }
    return newInt;
}

bool isPalindrome(int n)
{
    int flipped = flip(n);
    /* shift to remove trailing zeroes */
    while (!(flipped & 0x0001))
        flipped >>= 1;
    return n == flipped;
}

编辑

已为您的10001固定。

0
投票

有时也报告失败也很好;


0
投票
    public static bool IsPalindrome(int n) {
        for (int i = 0;  i < 16; i++) {
            if (((n >> i) & 1) != ((n >> (31 - i)) & 1)) {
                return false;
            }
        }
        return true;
    }

0
投票
bool PaLInt (unsigned int i, unsigned int bits)
{
    unsigned int t = i;
    unsigned int x = 0;
    while(i)
    {
        x = x << bits;        
        x = x | (i & ((1<<bits) - 1));
        i = i >> bits;
    }
    return x == t;
}

0
投票

我知道这个问题已经在2年前发布了,但是我有一个更好的解决方案,它不依赖于单词的大小和全部,]

int temp = 0;
int i = num;
while (1)
{ // let's say num is the number which has to be checked
    if (i & 0x1)
    {
        temp = temp + 1;
    }
    i = i >> 1;
    if (i) {
        temp = temp << 1;
    }   
    else   
    {
        break;
    }
}   

return temp == num;

0
投票

在JAVA中,如果您了解基本的二进制airthmetic,有一种简单的方法,这是代码:


0
投票
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
    unsigned int n = 134217729;
    unsigned int bits = floor(log(n)/log(2)+1);
    cout<< "Number of bits:" << bits << endl;
    unsigned int i=0;
    bool isPal = true;
    while(i<(bits/2))
    {
        if(((n & (unsigned int)pow(2,bits-i-1)) && (n & (unsigned int)pow(2,i))) 
                                         ||    
        (!(n & (unsigned int)pow(2,bits-i-1)) && !(n & (unsigned int)pow(2,i))))
        {
            i++;
            continue;
        }
        else
        {
            cout<<"Not a palindrome" << endl;
            isPal = false;
            break;
        }
}

    if(isPal)
        cout<<"Number is binary palindrome" << endl;
}

0
投票

以下解决方案在python中有效:


17
投票

希望正确:


3
投票

创建一个包含字符的256折线图,并将其反转为字符。给定一个4字节的整数,取第一个字符,在图表上查看,将答案与整数的最后一个字符进行比较。如果它们不同,则不是回文,如果中间的字符相同,则重复。如果他们不同,那不是回文,而是。


2
投票

这里有很多不错的解决方案。我认为,我认为这不是最有效的,但可读性很强:


1
投票

以下内容应适用于任何无符号类型。 (对有符号类型的位操作往往会遇到问题。)


1
投票
int palidrome (int num) 
{ 
  int rev = 0; 
  num = number; 
  while (num != 0)
  { 
    rev = (rev << 1) | (num & 1); num >> 1; 
  }

  if (rev = number) return 1; else return 0; 
}

0
投票

我总是有一个与Strings一起使用的回文函数,如果是,则返回true,否则返回false。在Java中。我唯一需要做的就是:


0
投票

通用版本:


0
投票

我认为最好的方法是从头开始并向内工作,即比较第一位和最后一位,第二位和第二位到最后一位,依此类推,它们将具有O(N / 2)其中N是整数的大小。如果您的配对在任何时候都不相同,那就不是回文。

© www.soinside.com 2019 - 2024. All rights reserved.