Given a 32-bit signed integer, reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123,return -321
Example3: x = 120, return 21
问题的关键在于对溢出的判断。
C++知识:
整数反转:
通过取余操作读取当前输入x的个位数,放到反转后的整数s的末位,通过s*10加上x的末位得到新的s,相当于将x左移一位。再通过x=x/10的操作,使得x右移一位,x的个位数到了小数位被强制类型转换掉了,再取余得到新的个位数。
判断溢出:
思路1:
直接用long或者long long计算,这样就保证不会溢出,再判断反转后的数字是否溢出
int reverse(int x){
long long res=0;
while(x!=0){
int t = res * 10 + x % 10;
if(t /10 != res)
return 0;
res = t;
t /= 10;
}
return res;
}
思路2:
通过字符串转换,由于stoi()函数会作int范围检查,利用异常处理机制。
int reverse(int x){
std::string str = std::to_string(x);
if(str[0] == '-')
std::reverse(str.begin()+1,str.end());
else
std::reverse(str.begin(),str.end());
try{
return stoi(str);
}
catch(out_of_range ex){
return 0;
}
}
python知识:
思路:
python中int都是长整型,可以通过直接比较32位整数大小来判断是否溢出。通过字符串分片来完成反转。
def reverse(self, x):
if x >= 0:
s = (int)(str(x)[::-1])
else:
s = -(int)(str(-x)[::-1])
if s >= -(2**31) and s <= (2**31)-1:
return s
else:
return 0
原文:https://www.cnblogs.com/Jessey-Ge/p/10993432.html