给定一个数字,判断该数字是不是回文数字,也即121 6556均为回文数字
class Solution {
private:
int num;
public:
int get_max(int len)
{
len--;
long long nAverage=1;
while(len--)
{
nAverage*=2;
}
nAverage--;
return nAverage;
}
int get_min(int len)
{
len--;
long long nAverage=1;
while(len--)
{
nAverage*=2;
}
return 0-nAverage;
}
int getLen(int x)
{
int nAverage = 1;
int nCount = 0;
while (x/nAverage)
{
nAverage *= 10;
nCount++;
}
return nCount;
}
int get_pos_num(int pos)
{
int i = 0;
int nAverage = 1;
while (i != pos)
{
nAverage *= 10;
i++;
}
int result = num % (nAverage * 10);
result = result / nAverage;
return result;
}
bool checkPar(int pos_1, int pos_2)
{
int value_1 = get_pos_num(pos_1);
int value_2 = get_pos_num(pos_2);
if (value_1 == value_2)
{
return true;
}
return false;
}
bool isPalindrome(int x) {
if(x>=get_max(sizeof(int)*8))
{
return false;
}
if(x<=get_min(sizeof(int)*8))
{
return false;
}
num = x;
int len = getLen(x);
int nCount = 0;
int index=len/2;
if (len & 0x1)
{
index++;
}
//位长为偶数
for (int i = len - 1; i >= index; i--)
{
if (checkPar(i, nCount++))
{
continue;
}
else
{
return false;
}
}
return true;
}
};
思路:首先判断数字是否已经超出了int的界限,然后获得该数字的位长,如果是奇数位,则最后一个比较的位置索引为len/2+1,如果是偶数位,则最后一个比较的位置索引就是len/2; 然后从首尾分别同时进发,进行检测,查看是否是回文数字