#7.整数反转
"""
题目描述：
给出一个 32 位的有符号整数，你需要将这个整数中每位上的数字进行反转。

示例1:
输入: 123
输出: 321

示例2：
输入: -123
输出: -321

示例3：
输入: 120
输出: 21

"""
#解题思路
"""
这题的关键在于取值范围：-2147483648～2147483647，如：2147483647 反转后：7463847412超出取值范围
注意：
python取余时：print(-123%10), 输出为7
分析：-123%10 = -123 - 10 * (-123 // 10) = -123 - 10 * (-13) = 7， 取余时会向下取整

"""
#python
#- * - coding: utf-8 - * -
#Author:JoeyChen
"""
执行时间：16ms，战胜97.54%python提交记录
内存消耗：11.8MB，
"""
class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        res = 0
        if x >= 0: #由于x为负数时python取余数值不好操作，故正负分离操作
            while x != 0:
                if res > 214748364:   #由于x取值的限制，翻转之后的res最后一位只能是1或2
                    return 0          #所以res只能是2147483641 或 2147483642而它们对应的x
                res = res * 10 + x % 10 #为1463847412 和 2463847412(超出数值范围)
                x //= 10                #res等于214748364时，x只能为1463847412
            return res
        else:
            x = abs(x)
            while x != 0:
                if res > 214748364:
                    return 0
                res = res * 10 + x % 10
                x /= 10
            return -res

