题目:给一个整数x,若该数字是一个回文数,则返回true;若不是回文数,则返回false思路:
思路:转换成字符串,判断字符串对称位置上的元素是否相同
①将int型数字转换成字符串(C语言里面就是转换成数组)
例如:
int x = 123456;
//将int型数据转换成int数组元素
int a[] = {1,2,3,4,5,6};
②有两种常用的计算方法:(1)取余;(2)除法;下面先比较一下二者的不同
(1)取余:比如有一个int型a=1234,a%10所得到的余数就是原来a的个位数
a%100所得到的余数就是原来a的十位和各位
......以此类推
(2)除法:还以a=1234为例,a/10=123在原来a的基础上少了一位,从右往左少
a/100=12,
......以此类推
③对于需要对一个int型数据进行逐位处理的情况,把取余和除法结合起来是很有必要的
例如本题,需要把x中的每一位上的数字放入到int型数组中
int remainder=0;
while(x>0)
{
remainder = x%10;//得到x的各位上的数
a[i] = remainder;
x = x/10;//取完各位上的数之后,各位没有用了,就及时处理掉
//例如:x=123,x/10=12
i++;
}
④接下来就是回文数的思想了:对称位置上的数相同
for(int j=0;j<i/2;j++)
{
if(a[i-1-j]!=a[j])
{
return false;
}
}
//若整个for循环执行完执行到此,则证明这个数是回文数
return true;
1.代码
bool isPalindrome(int x) {
int a[20];
int i=0,j=0;
if(x<0)
{
return false;
}
if(x==0)
{
return true;
}
//while循环的处理是关键点1
while(x>0)
{
a[i] = x%10;
x = x/10;
i++;
}
//是关键点2
for(j=0;j<i/2;j++)
{
if(a[j]!=a[i-1-j])
return false;
}
return true;
}