题目要求:将一个整数转为逆序。如123转为321,-123转为-321.
解题思路:对于负数,可以转为正数来进行。对于正数,可以采用result = result*10 + (x/10)%10的公式进行转换。一个数对10取余可以取得最后一位数,对10 取商,可以得到除尾数以外的其它所有数。
Notice:
1)int型的最大数值和最小数值分别为
INT_MAX = 2147483647
INT_MIN = -2147483648
对于x等于最小数或者最大数时,它的逆序数都超过了整型的表示范围,所以需返回零。
2)因为负数是转为正数来讨论的,所以这儿只讨论正数的范围。当result> INT_MAX/10时,那么逆序数一定会大于INT_MAX,所以返回零。需要在INT_MAX/10的时候判断,是因为,result也是整型,表示的返回不会大于INT_MAX返回,所以比较result > INT_MAX永远不会成立。当我尝试用Long long int 的时候还是不成立。
源代码:
class Solution {
public:
int reverse(int x) {
int num = 0;
int result = 0;
if(x == INT_MIN)
return 0;
if(x < 0)
return -reverse(-x);
// if(x > INT_MAX)永远不会成立,因为x永远只会小于INT_MAX,因为它是int型
// return 0;
while(x != 0)
{
num = x%10;
//必须提前比较,因为一旦result超过了int的表示范围,那么数值就会错误
if(result > INT_MAX/10)
return 0;
if(result == INT_MAX/10 && num > 7)
return 0;
result = result*10 + num;
x = x/10;
}
return (int)result;
}
};