9. 回文数
题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
思路:对于数字 1221,如果执行 1221 % 10,我们将得到最后一位数字 1,要得到倒数第二位数字,我们可以先通过除以 10 把最后一位数字从 1221 中移除,1221 / 10 = 122,再求出上一步结果除以 10 的余数,122 % 10 = 2,就可以得到倒数第二位数字。如果我们把最后一位数字乘以 10,再加上倒数第二位数字,1 * 10 + 2 = 12,就得到了我们想要的反转后的数字。如果继续这个过程,我们将得到更多位数的反转数字。
当原始数字小于或等于反转后的数字时,就意味着我们已经处理了一半位数的数字了。
class Solution {
public:
bool isPalindrome(int x)
{
//负数肯定不是回文数
//数字不为零,但个位为零,肯定不是回文数
if (x<0 ||(x != 0 && x % 10 == 0)) return false;
int revertedNum = 0;
while(x >revertedNum)
{
//取余得到的个位数乘10,再对输入数字取余
revertedNum = revertedNum*10 + x % 10;
x /= 10; //输入数字舍掉取余后的数字
}
//当数字长度为奇数时,我们可以通过 revertedNumber/10 去除处于中位的数字。
return x==revertedNum || x == revertedNum / 10;
}
};