题目描述
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 :
输入: 121
输出: true
输入: -121
输出: false
输入: 10
输出: false
解题思路
方法一:
将输入的整数转换为字符串,然后对字符串进行反转位置元素判断,循环数组大小一半次数,如果发现不一致的情况则返回false,循环结束返回true。
假设输入1221,那么将整数1221转换为字符串并存储,再对字符串1221进行反转位置比较,数组第一个元素和数组最后一个元素比较是否相同,数组第二个元素和数组倒数第二个元素比较是否相同,循环数组大小一半次数,循环结束都相同,则是回文数。
代码实现:
bool huiwenshu(int x,char a[],int n)
{
if(x<0)
return false;
sprintf(a,"%d",x);
for(int i=0;i<n/2;i++)
{
if(a[i]!=a[n-i-1])
{
return false;
}
}
return true;
}
int main()
{
char a[10];
if(huiwenshu(1001,a,4)==true)
{
cout<<"true"<<endl;
}
else
{
cout<<"false"<<endl;
}
return 0;
}
结果:
如果输入1002,结果:
方法二:
判断整数反转的值和原值是否一致。
在上一篇已经讲解过整数反转方法了:链接: 整数反转
直接将反转的整数和原整数比对,如果相等则是回文数,反之则不是。
代码实现:
bool huiwen(int x)
{
int y=x;//记录输入的整数
long long r=0;
if(x<0)//如果数负数
return false;
while(x!=0){
r=r*10+x%10;//计算反转整数
x/=10;
}
if(r!=y) //判断反转整数和原整数是否一致
return false;
else
return true;
}
int main()
{
if(huiwen(1001)==true)
{
cout<<"true"<<endl;
}
else
{
cout<<"false"<<endl;
}
return 0;
}
结果:
如果输入1002
结果: