C++ 回文数字代码不适用于边缘案例
我一直在做一些leetcode问题,但我想问一个: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;
给定一个整数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为底不是一个不合理的假设,但它不是问题陈述的一部分。