#9 回文数(C)
(1)解题思路
方法1:
step1 由示例1和2可以知道,x 小于0或 x 不为0且最后一位为0时,x 肯定不是回文数,返回 false。
step2 创建一个数组 array,将 x 的每一位数保存到数组中,最后用 for 循坏判断 x 是否为回文数。
方法2:
step1 由示例1和2可以知道,x 小于0或 x 不为0且最后一位为0时,x 肯定不是回文数,返回 false。
step2 将 x 反转,并将反转后的结果保存到 y 中。(注意 y 要用 long 类型,用 int 类型会溢出)
step3 判断 x 于 y 是否相等,若相等,则 x 为回文数;否则,x 不是回文数。
(2)代码
//方法1
#define MAXSIZE 32
bool isPalindrome(int x){
if(x < 0 || x != 0 && x % 10 == 0 ) //若x小于0或x不为0且最后一位为0,则x肯定不是回文数,返回false
return false;
int array[MAXSIZE]; //创建一个数组,用来保存x的所有位数
int count = 0; //用count来记录x有多少位
int r = x % 10; //取出x的第一位
array[count ++] = r;
x /= 10; //去掉x的第一位
while(x != 0){ //将x的“第一位”存入数组array中,并且count值加一
r = x % 10;
array[count ++] = r;
x /= 10;
}
for(int i = 0;i < count;i ++){ //判断x是否为回文数
if(array[i] != array[count - 1 - i])
return false;
}
return true;
}
//方法2
bool isPalindrome(int x){
if(x < 0 || x != 0 && x % 10 == 0 ) //若x小于0或x不为0且最后一位为0,则x肯定不是回文数,返回false
return false;
int temp = x;
long y = 0; //用y保存x反转后的结果
int r = temp % 10; //取出x的第一位
y = y * 10 + r;
temp /= 10; //去掉x的第一位
while(temp != 0){ //实现x的反转
r = temp % 10;
y = y * 10 + r;
temp /= 10;
}
if(x == y){
return true; //x与y相等,则x是回文数
}else{
return false; //x与y不相等,则x不是回文数
}
}

浙公网安备 33010602011771号