C++ 回文数字代码不适用于边缘案例

C++ 回文数字代码不适用于边缘案例,c++,algorithm,C++,Algorithm,我一直在做一些leetcode问题,但我想问一个:给定一个整数x,如果x是回文整数,则返回true。 它几乎适用于所有情况,除了像12321或88888这样的数字 为什么不起作用 class Solution { public: bool isPalindrome(int x) { if(x < 0 || (x % 10 == 0 && x != 0)) return false;

我一直在做一些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;
    }
};
类解决方案{
公众:
布尔伊斯帕林德罗姆(int x){
如果(x<0 | |(x%10==0&&x!=0))
返回false;
intz=0,p=1;
而(x>z)
{
z=z*p+x%10;
x=x/10;
p=p*10;
}
返回x==z | | x==z/10;
}
};
线路

                z = z * p + x % 10;
这是错误的<代码>z应移位一位。循环中不应更改移位大小。使用该行,在输入
12321
的循环之后,值将为
x=12,z=1203
。您会看到插入了额外的
0
。这是因为您使用了错误的轮班大小

线路应该是

                z = z * 10 + x % 10;

将数字转换为字符串,然后检查字符串是否为回文会更简单。我曾想过这样做,但限制条件是不使用字符串。这并不能真正解决问题,但除非有“回文整数”的定义,否则这个问题无法解决。这里的代码假设“回文整数”意味着“将整数转换为以10为底的文本的结果是回文的”。以10为底不是一个不合理的假设,但它不是问题陈述的一部分。