我一直在做一些leetcode问题,但遇到了这个问题:给定一个整数x,如果x是回文整数,则返回true。
它几乎适用于所有情况,除了像12321或88888这样的数字
为什么不起作用
我是弱智吗?
class Solution {
public:
bool isPalindrome(int x) {
if(x < 0 || (x % 10 == 0 && x != 0))
return false;
int z = 0, p = 1;
while (x > z)
{
z = z * p + x % 10;
x = x / 10;
p = p * 10;
}
return x == z || x == z / 10;
}
};
这条线
z = z * p + x % 10;
是错的。z
应移位一位。不应在循环中更改移位大小。使用该行,在输入12321
的循环之后,值将为x=12,z=1203
。您会看到插入了额外的0
。这是因为您使用了错误的班次大小。
线应为
z = z * 10 + x % 10;