题目:
给定一个 32 位有符号整数,将整数中的数字进行反转。
示例 1:
输入: 123 输出: 321
示例 2:
输入: -123 输出: -321
示例 3:
输入: 120 输出: 21
思路:
思路很简单,首先考虑最简单的正数,每次除以10取余得到最低位的数字,然后低位乘以10加上高位。
对于负数,先取相反数,按照正数的算法求得后再取相反数。
本题唯一需要注意的是:由于给定的输入和返回值都是int型,需要考虑int最大值,避免出现溢出而计算错误。采用方法是判断每次计算结果是否大于Integer.MAX_VALUE.
代码:
public static int reverse(int x) {
int sum = 0;
int temp = 0;
boolean flag = true;
if(x<0) {
x = -1*x;
flag = false;
}
while(x>0) {
temp = x % 10;
x = x / 10;
if(sum > Integer.MAX_VALUE/10) {
return 0;
}
sum = sum * 10 + temp;
}
return flag?sum:sum*-1;
}
注:判断是否溢出使用sum > Integer.MAX_VALUE/10,而不能使用sum * 10 > Integer.MAX_VALUE,因为sum为int型,sum * 10求得结果仍为int型,若sum * 10 > Integer.MAX_VALUE,则sum * 10已经发生了溢出,计算结果已经出错了。也可将sum设为long型变量,这样就不会发生溢出,计算结果仍是正确的。