检查整数是否为O(1)空间中的回文(错误答案)

时间:2014-05-29 17:46:57

标签: c++ c

我尝试通过使用按位运算来反转数字来解决这个问题: - 例如,如果数字的二进制表示是00000110,这个代码的作用是什么,将0000011发送到代码然后左移shift_num 5时间到了01100000,这显然是与原版相反的,之后该程序执行"&"这个数字与原始数字。如果答案是1,那么数字称为回文,否则返回false。逻辑中是否有一些缺陷?如果有,我认为它在&一部分。

class Solution {
public:
    bool isPalindrome(int x) {
        if(x<0)
            return false;
        int num=x;
        int reverse_num=x;
        int count=sizeof(x);
        num >>= 1;
        while(num)
            {
                reverse_num <<= 1;      
                reverse_num |= num & 1;
                num >>= 1;
                count--;
            }
        reverse_num <<= count;

        if(!(reverse_num&x))
            return true;
        else return false;
    }
};

我仍然想知道上一段代码有什么问题。很抱歉问这么愚蠢的问题。我是编程中的菜鸟。最初的问题是:https://oj.leetcode.com/problems/palindrome-number/

虽然我能够通过这样做解决这个问题:

class Solution {
public:
    bool isPalindrome(int x) {
        long long y=0;
        long long t=x;
        long long p;
        p=x;
        while(t){
            y=y*10+t%10;
            t=t/10;
        }
        if(p==y && p>=0)
            return true;
        else return false;

    }

};

1 个答案:

答案 0 :(得分:0)

对于最终的if语句,&amp;&amp;是合乎逻辑的。在C / C ++(以及许多其他语言)中,对整数的逻辑测试将返回true,除非该值为0.

因此,如果x或reverse_num为0

,则函数将仅返回true