解题思路
先取余数,再取商
Java代码
class Solution {
public int reverse(int x) {
long temp = 0;//中间变量,32位即4个字节,考虑溢出,我们用long;
while(x != 0){
long rev = temp*10;
temp = rev + x%10;//反转就是将最低位变为最高位,最高位变为最低位
x/=10;//目的是从最高位逐渐往下变
}
if(temp<Integer.MIN_VALUE || temp>Integer.MAX_VALUE){//判断temp是否有溢出现象
return 0;
}
return (int)temp;//最后满足条件的转换成我们int类型
}
}
Python代码
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
# and:与运算的两边,有假则假;若都为真,则选后者;若都为假,则选前者;
sign = x < 0 and -1 or 1
x = abs(x)
ans = 0
while x:
ans = ans * 10 + x % 10 # 求余
x //= 10 # 求商
return sign * ans if ans <= 0x7fffffff else 0
s = Solution()
res = s.reverse(123)
print(res)
附录
一.或运算
1.0 or 1
结果为:1
2.1 or 0
结果为:1
3.1 or 2
结果为:1
4.2 or 1
结果为:2
5.0 or []
结果为:[]
6.[] or 0
结果为:0
二.与运算
1.0 and 1
结果为:0
2.1 and 0
结果为:0
3.1 and 2
结果为:2
4.2 and 1
结果为:1
5.’ ’ and 0
结果为:’ ’
6.0 and ’ ’
结果为:0
三.混合运算
1.1 < ( 2 == 2)
结果为:False 这道题就不用多说了,2==2为True,True换成数字为1,1<1明显为Flase
2.1 < 2 == 2
结果为:True
按照正常思路,比较运算优先级比等于优先级高,所以这道题先算1 < 2 为True,True为1,1不等于2,所以为Flase
但是,答案明明就是True,实际上这道题是这样算的:
1 < 2 and 2 == 2 这样一转变,是不是立马就明白了
因为逻辑运算优先级低,所以最后运算为:True and True
总结:
1.or:或运算的两边,有真则真;若都为真,则选前者;若都为假,则选后者;
2.and:与运算的两边,有假则假;若都为真,则选后者;若都为假,则选前者;
3.混合运算时,应当考虑运算符优先级的问题,当有括号时,先算括号内的运算