9.回文数

image-20241101184840626

这题把数字看作字符串肯定是好解决的,题解有绝妙的思路

1
2
3
4
老样子先排除:
x负数不行,尾数为0不行
if(x<0||(x%10==0&&x!=0))
return false;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
看 12321 这个数字 假设他为x
现在我们要开始倒序他
把 x%10 把个位拿出来
再把 x=x/10 准备进行下一步操作
那么最后两位倒序就是:
re=(x%10)*10+x%10;

之后就是再次进行操作:
x=x/10;
re=re*10+x%10;

停止条件判断:
我们要判断逆序的是否等于正序的,有奇数和偶数两种可能
比如 12321 我们re=123的时候就够了
比如 1221 我们re=12
因此就是当正序的x=re||re/10为 True
当正序的<=逆序,也就是x<=re时就可以停止了

最终代码

1
2
3
4
5
6
7
8
9
10
11
bool isPalindrome(int x) {
if(x<0||(x%10==0&&x!=0)){
return false;
}
int renum=0;
while(x>renum){
renum=renum*10+x%10;
x/=10;
}
return x==renum||x==renum/10;
}