问题描述
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
代码
这个属于简单级别的代码,这里需要注意32位int型的范围就可以
class Solution {
public:
int reverse(int x) {
int cur_num = 0;
// 判断是不是-2^31, 否则会出现溢出
if(abs(x) == pow(2, 31)){
return 0;
}else{
cur_num = abs(x);
}
// 使用long型,避免dst_num溢出
long dst_num = 0;
int single = 0;
while(cur_num > 0){
single = cur_num % 10;
dst_num = dst_num * 10 + single;
cur_num = cur_num / 10;
}
if(x<0){
dst_num = -dst_num;
}
long threshold = pow(2, 31);
if(dst_num < -threshold || dst_num >= threshold){
dst_num = 0;
}
return dst_num;
}
};
python 代码更简洁些
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 重点在于判断是否溢出, 32位的范围 [-2^31, 2^31)
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
# 判断是否为负
is_neg = True if x < 0 else False
num_str = str(-x) if is_neg else str(x)
# 赋值给新的字符串
new_num_str = ''
for i in range(len(num_str)-1, -1, -1):
new_num_str += num_str[i]
print(new_num_str)
# 判断是否会溢出
threshold = pow(2,31) # 2147483648
if is_neg and int(new_num_str) <= threshold:
new_num = -int(new_num_str)
elif not is_neg and int(new_num_str) < threshold:
new_num = int(new_num_str)
else:
new_num = 0
return new_num