Reverse Integer

题目摘要:

Reverse digits of an integer.

Example1: x =  123, return  321

Example2: x = -123, return -321

  这道题不算难,主要是要考虑"反转后的值可能越界"这一种情况。(此题起初设计时,未考虑这种情况,因此网上很多旧的文章也没有处理这种情况)

一看到reverse,我就想到栈。写的代码AC了,可是太丑,下面贴出别人简洁的代码。

solution1:

int reverse(int x) {
    long long res = 0;
    while(x != 0) 
    {
        res = res*10 + x%10;
        x /= 10;
    }
    return (res<INT_MIN || res>INT_MAX) ? 0 : res;
}

  此法使用long long类型来处理overflow,关于c++基本类型表示范围,参见http://blog.csdn.net/a775992553/article/details/8790241

但是,万一不让使用long long类型呢?参见下面

solution2:

int reverse(int x) {
    if(x == INT_MIN)
        return 0;
    int res = 0;
    int tmp = abs(x);
    while (tmp != 0)
    {
        if(res > (INT_MAX - tmp%10)/10)
            return 0;
        res = res * 10 + tmp % 10;
        tmp /= 10;
    }
    return x > 0 ? res : -res;
}

参考文章:http://blog.csdn.net/linhuanmars/article/details/20024837

 

posted @ 2014-12-22 11:28  Sawyer Ford  阅读(137)  评论(0编辑  收藏  举报