题目描述:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
e.g:
- 输入: 123 输出: 321
- 输入: -123 输出: -321
思路:
余10,result * 10 加上余10后的结果,需要验证结果是否可能溢出
java代码
/**
* 题目5:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
* e.g: 1. 输入: 123 输出: 321
* 2. 输入: -123 输出: -321
* 思路: 余10,result * 10 加上余10后的结果
* 需要验证结果是否又可能移除,可以在加操作前,用最大值减去余10后的结果与result * 10比较
*
* @param x
* @return
*/
private static int solution06(int x) {
int input = x;
if (input < 0) {
input = -input;
}
int result = 0;
int temp = 0;
while (input > 0) {
temp = input % 10;
// 溢出,可能存在的问题:负数和正数不一样
// 乘可能造成的溢出
if (Integer.MAX_VALUE / 10 < result) {
result = 0;
break;
}
// 加可能造成的溢出
if (Integer.MAX_VALUE - result * 10 < temp) {
result = 0;
break;
}
result = result * 10 + temp;
input = input / 10;
}
if (x < 0) {
return -result;
}
return result;
}