算法练习-Palindrome Number

判断回文整数

来源

https://leetcode.com/problems/palindrome-number/

要求

判断一个整数是不是回文数,尽量减少内存暂用。

思路

可能的情况:

  • 负数的应当作非回文数
  • 0-9 是回文数
  • 判断时可能会溢出

>9 的数开始判断,先计算出整数有多少位,这其中要处理出现溢出的情况,例如整数 x = 34043,计算出位数 len = 5

以此判断最高位和最低位是否相同,若相同 令 x = 404,继续判断。

实现代码

bool isPalindrome(int x) {
    static const int MAX_INT = (int) ((unsigned)~0 >> 1);
    if(0 > x){
        return false;
    }
    
    int len = 1, decimal = 1;
    while(x >= decimal*10){ // 计算整数有多少位
        decimal *= 10;
        ++len;
        if(MAX_INT / decimal < 10)
        { 
            ++len;
            break;
        }
    }
    
    if(len == 1){
        return true;
    }
    else{
        int low = 1;
        while(len-- > low++){
            if(x / decimal == x % 10){
                x = (x % decimal - x % 10) / 10;
                decimal /= 100;
            }
            else{
                return false;
            }
        }
        return true;
    }
}
posted @ 2016-06-02 21:28  NobodyZhou  阅读(96)  评论(0编辑  收藏  举报