#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不是回文数
    }
}
posted @ 2024-07-10 20:11  KenWan  阅读(46)  评论(0)    收藏  举报