题目链接:
回文数
分析:
1. 首先判断该数字num有多少位
此处用一个循环,赋一个值div,用给出的数字num除以div,然后不断地给div乘10,直到div满足条件
2. 计算出最高位的数字left
用给出的数字num除以div(也就是num的位数),就可得到最高位left
3. 计算出最低位的数字right
用给出的数字对10取余,就可以计算出最低位的数字right
4. 此时应判断最高位是否等于最低位 left ?= right
如果不等于返回false
5. 继续判断除最高位最低位里面的数字,更新num
此时新的num应该是除减去最高位最低位的数字后的数字
如 45678,减去最高位4和最低位8后,更新后的num应该是567
具体实现为 num = (num - left*div) / 10
然后进行新一轮的判断
代码实现如下:
public class HuiWen {
public boolean isPalindrome(int x) {
if (x < 0)
return false;
int num = x;
int div = 1;
// 计算 num的位数
while (num / div >= 10) {
div *= 10;
}
while (num != 0) {
int left = num / div;
int right = num % 10;
if (left != right)
return false;
// 更新 num
num = (num - left*div) / 10;
// 上面已经减去最左边和最右边的数字了,
// 所以位数相应的要小两位,即除100
div /= 100;
}
return true;
}
}