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