问题描述:
给你一个整数x,如果x是一个回文整数,返回true;否则,返回false。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例1:
输入:x = 121
输出:true
示例2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
示例4:
输入:x = -101
输出:false
题目分析:
判断是否为回文数,仅需将数字的后一半与前一半相比较看是否一致即可,对于中间的数字,由于不影响最终结果,比较时可以剔除。在开始之前还需要判断两种溢出情况,即数字小于0或末尾为零,此时必不为回文数。
代码实现:
源程序:
/*
问题:判断是否为回文数
*/
#include <iostream>
using namespace std;
class Solution {
public:
bool isPalindrome(int x) {
//判断溢出
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int revertedNumber = 0;
while (x > revertedNumber) {
revertedNumber = revertedNumber * 10 + x % 10;
x /= 10;
}
return x == revertedNumber || x == revertedNumber / 10;
}
};
int main(int argc,char *argv[])
{
int x = 12321;
Solution s;
bool res = s.isPalindrome(x);
if (res == 1) {
cout << "true" << endl;
}
else {
cout << "false"<< endl;
}
}
执行结果: