NC57 反转数字
描述 给定一个32位的有符号整数num,将num中的数字部分反转,最后返回反转的结果
1.只反转数字部分,符号位部分不反转
2.反转后整数num超过 32 位的有符号整数的范围 [−231, 231 − 1] ,返回 0
3.假设本题不允许存储 64 位整数(有符号或无符号,即C++不能使用long long ,Java不能使用long等)
数据范围: -2^31 <= x <= 2^31-1
思路:通过对10取余,获取个位数,获取的数是结果的高位,原数据每次/10,再%10获取每位的数字。结果result每次*10,获取到的个位数加入到结果result中。这样就将低位转化成高位,高位的数字每次并到低位后面。
我之前一直纠结不能使用long,那么如果result是int类型的,最后result越界了,要怎么处理。要不要在获取每一位的数据的同时记录数字长度,当长度记录到9的时候,如果此时x大于2就返回0,小于2返回result。如果刚好等于2,如果是正数(flag为false),result大于147483647就返回0,如果是负数(flag为True),result则大于147483648返回0,否则返回result。后来看评论,大家好像都将result设置为long来处理。就这样吧,懒得写了。
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param x int整型
# @return int整型
#
class Solution:
def reverse(self , x: int) -> int:
# write code here
result = 0
flag = False
if x < 0:
flag = True
x = -x
while x != 0:
k = x % 10
x = int(x / 10)
result = result * 10 + k
if flag:
result = -result
if (result > 2147483647) | (result < -2147483648):
return 0
else:
return result