提问者:小点点

回文数字代码不适用于边缘情况


我一直在做一些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;
    }
};

共1个答案

匿名用户

这条线

                z = z * p + x % 10;

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

线应为

                z = z * 10 + x % 10;