睡觉前看了一眼题目,没找到思路,就睡了,没想到早上做梦梦到算法,然后惊醒,随后一次性提交AC,实在难得。判断回文数,首先要注意负数不是回文数,其次就是如何对比头尾的数字是否相同。我的思路是,通过常规的取余的方法可以得到最低位的数字,那么最高位的数字可以通过整除10的倍数。那么这个10的倍数如何得到呢?可以通过计算X的位数得到。具体代码如下:
class Solution {
public:
bool isPalindrome(int x) {
int count,total;
int m,n;
count=0;
total=x;
if(x<0)
return false;
while(x!=0)//得到x的位数
{
count++;
x=x/10;
}
x=total;
while(x!=0)
{
m=x%10;
n=(int)(total/pow((double)10,(double)count-1))%10;//得到需要对比的数字,该数字位于最低位
if(m!=n)
return false;
x=x/10;
count--;
}
return true;
}
};