问题:
将一个整数中的数字进行颠倒,当颠倒后的整数溢出时,返回 0 (标记为 32 位整数)。
样例:
样例 1:
输入:123 输出:321
样例 2:
输入:-123 输出:-321
python:
class Solution:
"""
@param n: the integer to be reversed
@return: the reversed integer
"""
def reverseInteger(self, n):
# write your code here
MAX = 2147447412
MIN = -2147447412
if n == 0 or n > MAX or n < MIN:
return 0
flag = 1
if n > 0:
flag = 1
else:
flag = -1
nAbs = abs(n)
result = 0
while nAbs != 0:
temp = result*10 + nAbs%10
if result == temp//10:
result = temp
nAbs = nAbs//10
else:
return 0
if result > MAX:
return 0
return result*flag
C++:
class Solution {
public:
/**
* @param n: the integer to be reversed
* @return: the reversed integer
*/
int reverseInteger(int n) {
// write your code here
int MAX = 2147447412;
int MIN = -2147447412;
if(n == 0 || n > MAX || n < MIN)
{
return 0;
}
int result = 0;
while(n != 0)
{
int temp = result*10 + n%10;
if(result == temp/10)
{
result = temp;
n /= 10;
}else{
return 0;
}
}
return result;
}
};
PS:先根据回文的特点设置范围,排除一定会溢出的,然后再想溢出规则。(int范围-2147483648~2147483647)
PS:python之所以复杂是因为python的int溢出直接会转成长整型,而且这么写是错误的,因为最后的比较是不可能发生的
PS:C++镜像取余,python取余为非负