【题目简介】
将给出的整数x翻转。
例1:x=123,返回321
例2:x=-123,返回-321
你有思考过下面的这些问题么?
如果整数的最后一位是0,那么输出应该是什么?比如10,100
你注意到翻转后的整数可能溢出吗?假设输入是32位整数,则将翻转10000000003就会溢出,你该怎么处理这样的样例?抛出异常?这样做很好,但是如果不允许抛出异常呢?这样的话你必须重新设计函数(比如添加一个额外的参数)。
示例:
输入
-123
输出
-321
【重要问题】C++和Python在整除和取余上是存在差异的,c从c99开始规定向0取整,python则规定向负无穷取整。
- 向负无穷取整
-123 / 10 = -13
-123 % 10 = -123 - (-13 * 10) = 7 - 向零取整
-123 / 10 = -12
-123 % 10 = -123 - (-12* 10) = -3
【结论】这就导致,在Python实现中,对于负数我们无法通过取余操作获取到个位的值,需要额外处理正负符号。
【答案】
C++版本,不用考虑x为正负的情况。
class Solution {
public:
/**
*
* @param x int整型
* @return int整型
*/
int reverse(int x) {
// write code here
long rx = 0;
while (x) {
rx = rx * 10 + x % 10;
x = x / 10;
}
return rx < INT_MAX && rx > INT_MIN ? rx : 0;
}
};
Python版本,用了两种方法,特别是方法二挺好玩的,熟悉下内置函数。
#
#
# @param x int整型
# @return int整型
#
class Solution:
def method1(self, x):
sign = 1
if x < 0:
sign = -1
x *= -1
rx = 0
while x:
r = x % 10
x = x // 10
rx = r + rx * 10
return sign * rx
def method2(self, x):
if x == 0: return x
elif x < 0: sign = -1
else: sign = 1
return sign * int(str(sign * x)[::-1].lstrip('0'), 10)
def reverse(self , x ):
# write code here
return self.method2(x)