本文主要是介绍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 整数反转 详解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!