题目:
给你一个整数
x
,如果x
是一个回文整数,返回true
;否则,返回false
。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
【提示】
-2^31 <= x <= 2^31 - 1
【已知代码】
bool isPalindrome(int x){
}
【参考示例】
示例 1:
输入:x = 121
输出:true
示例 2:输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
题目分析:
【已知信息】
有一个已知的数x。以及它的范围。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
【要求条件】
(1)整型范围需要大一点的。
(2)判断一个数是不是回文数。
(3)用true或false返回。
我做这道题的思路:
这道题我是从“回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数”这句话入手的。所以我的步骤分为以下几个:
(1)设一个变量result来表示x的回文数。
(2)将x赋给temp,用一个循环,用temp%10求出尾数,再加上上一次求出来的尾数的10倍,再将temp/10。例如求121的回文数:
result=0;
第一次是:temp%10=1;result*10=0;result=temp%10+result*10=1;temp/10=12;
第二次是:temp%10=2;result*10=10;result=temp%10+result*10=12;temp/10=1;
第三次是:temp%10=1;result*10=120;result=temp%10+result*10=121;temp/10=0;
当temp=0时,即可退出循环。
(3)判断result这个回文数是不是和x相等,若相等即是回文数返回true,不相等则返回false。
解决方案:
bool isPalindrome(int x)
{
long result=0;
int temp=x;
//求回文数
while(temp>0)
{
result=temp%10+result*10;
temp/=10;
}
//判断回文数
if(result==x)
return true;
else
return false;
}