9.回文数

这题把数字看作字符串肯定是好解决的,题解有绝妙的思路
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; }
|