给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 1: 输入: 123 输入: -123 输入: 120 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。 来源:力扣(LeetCode) |
题目思路: 安安python 用字符串进行间接转换 安安c int不行用了long |
''' 2.python ** 幂次方
c语言幂次:pow(x,y) 2^31-1=2147483647,-2^31=-2147483648 |
#采用字符串进行间接转换
class Solution:
def reverse(self, x: int) -> int:
x_str = str(x)
if(x>0):
x_str_rev = x_str[::-1]
x_rev = int(x_str_rev)
elif(x<0):
tmp = x_str[::-1]
x_str_rev = "-" + tmp[0:len(tmp)-1]
x_rev = int(x_str_rev)
#print(x_str_rev)
else:
x_rev = 0
if -2**31 <= x_rev <= 2**31 -1:
return x_rev
else:
return 0
'''
知识点
1.Python去掉数字前面的0
因为Python默认在转换成字符串时忽略前面的0,因此可以通过格式转换的方法实现去0
>>> str(000001)
'1'
>>> int(str(000001))
1
2.python ** 幂次方
'''
/*
c语言
anan
2020.1.31
*/
int reverse(int x){
long x_rev = 0; //用int会报错,就用了long
while(x){
if((x_rev*10 + x%10 >= -pow(2,31)) && (x_rev*10 + x%10 <=(pow(2,31)-1))){
x_rev = x_rev*10 + x%10;
x = x/10;
}else{
return 0;
}
}
return x_rev;
}
//别人家的
int reverse(int x)
{
int max = 0x7fffffff, min = 0x80000000;//int的最大值最小值
long rs = 0;//用long类型判断溢出
for(;x;rs = rs*10+x%10,x/=10);//逆序,正负通吃,不用单独考虑负值
return rs>max||rs<min?0:rs;//超了最大值低于最小值就返回0
}