python 整数反转 详解

2021/7/14 17:05:52

本文主要是介绍python 整数反转 详解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

"""
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [ - 2 ^ 31 , 2 ^ 31 - 1 ] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

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

示例 2:
输入:x = -123
输出:-321

示例 3:
输入:x = 120
输出:21

示例 4:
输入:x = 0
输出:0

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
"""


def reverse(self, x: int) -> int:
    # res 为取绝对值
    y, res = abs(x), 0
    # 其数值范围为 [−2^31,  2^31 − 1]
    # 利用左移右移来表示 2 的 x 次方
    # 例如 a << x 表示 a * 2 ^ x
    # 因为y取的是绝对值 固取值范围也只考虑整数的情况
    # 下面是一个if else 的简写法,展开如下
    # if x > 0:
    #   boundry = (1 << 31) - 1         -->负数情况
    # else:
    #   boundry = 1 << 31               -->正数情况
    boundry = (1 << 31) - 1 if x > 0 else 1 << 31
    # 用循环的方式来确定是否还有值,只要有值就继续取数字
    while y != 0:
        # res 的初始值为 0 , 其实不难发现,每次都取余 y 的 10
        # 也就是取输入数字的最后一位
        # 每次计算时 res * 10 其实也是为了增加一位从而实现倒叙插入数字的方式
        res = res * 10 + y % 10
        # 这个 if 语句在这里可以节省一个对 0 的判断
        # 但是如果非0 每次到结束之前每次都要判断
        # 因此这里笔者并没有选择在这里使用该判断语句
        #if res > boundry:
            #return 0
        # 每次计算完后,都要去掉y的最后一位,这样保证每次取余的最后一位都是未加入 res 的
        y //= 10
    # 循环完后加入判断,如果超出取值范围,则根据要求直接返回 0
    if res > boundry:
        return 0
    if res == 0:
        return 0
    # 如果要求末尾是 0 反转后也要保留的话,可以加入此判断语句
    #if x % 10 == 0:
    #    res = "0" + str(res)
    # 因为输入的是 int 类型 所以句首的 0 会被自动去掉
    # #如果输入字符型 可以加入以下 while 语句来去掉句首的 0
    #i = 0
    #while str(x)[i] == "0":
        #res = str(res) + "0"
        #i += i
    return res if x > 0 else -res


print(reverse(0, int(input())))





# 程序参考:
# 链接:https: // leetcode - cn.com / problems / reverse - integer / solution / pythondan - chu - he - tui - ru - shu -
# 作者:stray_camel


这篇关于python 整数反转 详解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程