题目描述:判断一个数是否为回文数,是返回true,不是返回false
注意:负数的处理
若有需要,请访问我的Github获取完整C++实现。
//思路一:
//解题思路:循环取数字的第一位和最后一位作比较,
//若相等则取第二位和倒数第二位作比较,直到完成比较或者遇到不相等情况程序结束
class Solution
{
public:
bool isPalindrome(int x)
{
if (x < 0)
return false;
//除数
int d = 1;
while(x / d >= 10 )
{
d = d * 10;
}
while(x > 0)
{
//quotient商
int q = x / d;
//remainder余数
int r = x % 10;
if(q != r)
//将 x 的第一位和最后一位去掉之后的十进制数
x = x % d / 10;
//去掉两位后,原来的 x 少了两位,除数要缩小100倍
d = d / 100;
}
return true;
}
};
//20180702更新
//思路二:一种更简单的思路
//若原数小于0,返回false;
//将原数反转,判断反转后是否与原数相等,不相等返回false;
//否则,返回true
class Solution {
public:
bool isPalindrome(int x) {
int inverse_num = 0;
int original_num = x;
if(x < 0)
return false;
else
{
while(x)
{
int m = x % 10;
inverse_num = inverse_num * 10 + m;
x = x / 10;
}
if(inverse_num != original_num)
return false;
}
return true;
}
};