题目:
解法一:
解题思路:
依据题意可知,负数不可能是一个回文数,那么我们判断的数范围就是非负数。这里定义了一个整型数组(由于提前知道传入数据的范围,所以数组大小定为10能够满足解题需求),然后拆分参数的各个位,并存入数组中。由回文数的定义:回文数正序(从左向右)和倒序(从右向左)读都是一样的整数。则参数若为回文数时,数组前后对应位置的数据应该是相同的,否则会出现不同。
代码:
cpp
bool isPalindrome(int x)
{
if(x < 0)
return false;
else
{
int ch[10] = {0};
int *p = ch;
int *q = ch;
while(x)
{
*p = x%10;
x = x/10;
p++;
}
p--;
while(p > q)
{
if(*p != *q)
return false;
p--;
q++;
}
return true;
}
}
解法二:
解题思路:
依据题意可知,负数不可能是一个回文数,那么我们判断的数范围就是非负数。由于这里判断的是回文数,而不是回文字符串,我们还可以利用如下方法实现判断。对于任意一个非负数来说,我们可以拆分出其各个位的值,并可以根据得到各个位的顺序还原出原数据。而对于一个回文数来说,我将每次拆分出来的最低位,当作对应位置的高位来进行还原数据的操作,得到的数据应该与原数据相等。
例:原数据:123,拆分:1 2 3,123 = 1*100+2*10+3,123 != 3*100+2*10+1。
原数据:1 21,拆分:1 2 1,1 21 = 1 *100+2*10+1,1 21 = 1*100+2*10+1。
代码:
cpp
bool isPalindrome(int x)
{
if(x < 0)
return false;
else
{
long sum = 0;
int t = x;
while(x)
{
sum = 10*sum + x%10;
x = x/10;
}
if(sum == t)
return true;
else
return false;
}
}