版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/karry_zzj/article/details/86570031
问题描述
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
Example 1: Input: 121 Output: true
Example 2: Input: -121 Output: false
Example 3: Input: 10 Output: false
依题意可知,负数一定不是回文数,且个非零的数的个位为0也一定不是回文数。
方法一:
我们可以将这个数的每位填入一个数组中,然后下标为0与下标为len-1的数比较是否相等,依次比较直到中间位,这是常有思维。
bool isPalindrome(int x) {
if(x < 0) return false;
if(x % 10 == 0 && x/10 != 0) return false;
int a[10];
int k = 0;
while(x > 0)
{
a[k] = x%10;
x /= 10;
k++;
}
int ok = 1;
for(int i=0; i<k/2; i++)
{
if(a[i] != a[k-i-1])
{
ok = 0;
break;
}
}
if(ok) return true;
else return false;
}
方法二:
我们可以将一个数a颠倒其本身得到b,然后将a与b进行比较,但是若a为int类型数据颠倒后的b超过int类型范围,则不能比较,那么我们可以综合以上两个方式,只需要得到一半颠倒的数,比如
1221,我们若得到后一半“21”颠倒的数即“12”,并与前一半数进行比较即可避免超过int范围。
bool isPalindrome(int x) {
if(x < 0) return false;
if(x % 10 == 0 && x/10 != 0) return false;
int revertedNumber = 0;
while(x > revertedNumber)
{
revertedNumber = revertedNumber * 10 + x % 10;
x /= 10;
}
return x == revertedNumber || x == revertedNumber/10;
}