题目
Given a 32-bit signed integer, reverse digits of an integer.
Example 1:
Input: 123 Output: 321
Example 2:
Input: -123 Output: -321
Example 3:
Input: 120 Output: 21
Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
这个题难点就是在判断溢出的问题上,里面有一条测试数据,Input:1534236469,Expected:0。那么如何判断溢出,其中有if(total < INT_MIN || total > INT_MAX) return 0;但是觉得并不够好,也看到了一个大牛的博文,所以来借鉴一下。
如何判断是否溢出?
加法溢出判断:若c=a+b; c-a!=b则溢出;或者a, b>0, c<0溢出;或者a, b<0, c>0溢出;
减法溢出判断:若c=a-b; c+b!=a则溢出;
除法溢出判断:若b!=0 && a/b=c; b*c!=a则溢出
乘法溢出判断:若c=a*b; a!=0 && c/a!=b则溢出
---------------------
作者:登月哥
来源:CSDN
原文:https://blog.csdn.net/m0_37454852/article/details/78148840
版权声明:本文为博主原创文章,转载请附上博文链接!
以下为代码:
int reverse(int x) {
int total = 0;
while(x){
int temp = total;
total = total * 10 + x % 10;
if((total - x % 10) / 10 != temp) return 0;
x /= 10;
}
return total;
}