这一题最关键的就是溢出!!!!!!
其他的求余数,反转思路都很简单。
代码如下:
class Solution {
public:
int reverse(int x) {
int temp = 0;
while (x != 0) {
if (temp >INT_MAX / 10 || temp <(INT_MIN) / 10) return 0;
temp = temp * 10 + x % 10;
x = x / 10;
}
return temp;
}
};
注:趁这个机会补充一下溢出的判断:
溢出可以通过获取INT_MAX和INT_MIN来辅助判断,INT_MAX=0x7FFFFFFF,INT_MIN=0x7FFFFFFF+1
有整数x,判断是否溢出if(x>INT_MAX||x<INT_MIN)
若是涉及乘法,比如b=x*10,这时候得出的b值已经溢出并被截取,此时判断是否溢出就要
if (temp >INT_MAX / 10 || temp <(INT_MIN) / 10)
2.python:
首先要明确Python中的取余是与C++不一样的,具体可以看http://blog.sina.com.cn/s/blog_6a6c136d0101iukq.html
所以在代码中为了方便将负数都转换为正数。
其次,Python3中int型都是长整型,所以判断32位整数是否溢出可以直接比较大小,而不是像C++一样比较被截取后的字符大小:
if (temp >2**31-1 || temp <-2**31)
综上代码如下:
class Solution:
def reverse(self, x):
temp=0
num=2**31
m=1
if x<0:
x=x*(-1)
m=-1
while x!=0:
temp=temp*10+x%10
x=x//10
if(temp>(num-1) or temp<-1*num):
return 0
return temp*m
网上更优的Python方法:利用list.reverse();字符串切片法;
class Solution:
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
if x >= 0:
s = int(str(x)[::-1])//内容反转,再强制转换为int
else:
s = -int(str(-x)[::-1])
if s>=-(2**31) and s<=(2**31)-1:
return s
else:
return 0