题目要求很简单,就是给定一个在[−2^31, 2^31 − 1]范围内的整数,对该整数取反。
比如,
输入=123, 输出=321。
输入=-123,输出=-321。
输入=120, 输出=21。
这个题目在求解的时候,需要注意的是数据类型的选取,因为涉及到溢出,其次当输出结果产出范围后,结果要变为0。在编写代码的时候,因为忘记了移位符号和运算符的优先级顺序,卡了一下,刚好当天晚上在看《深入理解计算机系统》时候,看到这个知识点,移位符的优先级是低于运算符的。在python中是不需要考虑数据类型的,代码如下所示:
C++:
@by_chandepire
int reverse(int x) {
long long result=0;
long long max = ((long long)1<<31)-1;
long long min = 0 - (1 << 31);
while(x)
{
result = result * 10 + x % 10;
x = x /10;
}
return result>max || result < min?0:result;
}
python:
@by_chandepire
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
result = 0
min = -(1<<31)
max = (1<<31) - 1
flag = 1
if x < 0:
flag = -1
x = -x
while x:
result = result*10 + x % 10
x = x / 10
if result < min or result > max:
return 0
else:
return result*flag