Чтобы проверить, является ли целое число палиндромом в пространстве O (1) (неправильный ответ)

0

Я попытался решить этот вопрос, изменив число, используя побитовые операции: - скажем, например, если числовое двоичное представление - 00000110, то, что делает этот код, отправьте 0000011 в код, а затем влево shift reverse_num 5 раз, чтобы получить 01100000, что очевидно наоборот, эта программа выполняет "&" этого номера с исходным номером. Если ответ равен 1, тогда число называется палиндромом, возвращается false false. Есть ли какой-то недостаток в логике? Если есть, я думаю, что это в & part.

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;
    }
};

Я все еще хочу знать, что не так с предыдущим кодом. Извините за такой глупый вопрос. Я программирую в noob. Оригинальный вопрос: 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;

    }

};
  • 4
    Если вы спрашиваете, что я думаю, вы спрашиваете, в двоичном коде 10001 это палиндром, а в десятичном 17 нет.
  • 3
    reverse_num & x будет истинным, если у них есть общие биты, а не все биты. Используйте reverse_num == x чтобы увидеть, совпадают ли они.
Показать ещё 6 комментариев
Теги:

1 ответ

0

Для окончательного оператора if && является логическим и. В C/C++ (и многих других языках) логический тест для целого числа возвращает true, если значение равно 0.

Таким образом, ваша функция вернет true только в том случае, если x или reverse_num равно 0

  • 0
    Извините, это было непреднамеренно, я имел в виду & только. но я понял, что делаю инверсию битов, но они хотят инверсию цифр, это разные вещи

Ещё вопросы

Сообщество Overcoder
Наверх
Меню