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
一刷:
由于不知道输入的位数,就用while循环求最低位的数字,依次降位,然后每次降位再把最低位的和升位:
public static int reverse(int x) {
int result = 0;
if (x == 0) {
return result;
}
while (true) {
int n = x % 10;
result = result * 10 + n;
x = (x - n) / 10;
if (x == 0) {
break;
}
}
return result;
}
然而忽略了,反转数字后越界的问题。
于是考虑在每次赋值的时候判断下是否能还原到之前的值,如果可以还原的话就OK了。
public static int reverse(int x) {
int result = 0;
if (x == 0) {
return result;
}
while (true) {
int n = x % 10;
result = result * 10 + n;
if (result % 10 != n) {
return 0;
}
System.out.println("result:" + result + ";x:" + x + ";n:" + n);
x = (x - n) / 10;
if (x == 0) {
break;
}
}
return result;
}