我尝试通过使用按位运算来反转数字来解决这个问题: - 例如,如果数字的二进制表示是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;
}
};
答案 0 :(得分:0)
对于最终的if语句,&amp;&amp;是合乎逻辑的。在C / C ++(以及许多其他语言)中,对整数的逻辑测试将返回true,除非该值为0.
因此,如果x或reverse_num为0
,则函数将仅返回true