反转整数

题目:给定一个有符号的32位整数,将整数中的数字进行反转。
注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231 , 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0

示例1

1
2
输入:123
输出:321

示例2

1
2
输入:-1230
输出:-321

解法
这里是将数字进行反转,即可以通过求余依次将原数字末尾数取出,再将原数字除以10并取整供下一次循环使用;即:

1
2
pop = num % 10;
num = parseInt(num / 10);

把原数字进行求余和求值的操作后,再进行乘法操作:

1
2
3
4
temp = 0;

// 求最终的反转值
temp = temp * 10 + pop;

在 JavaScript 中 Number 的最大安全值和最小安全值均是 Number.MAX_SAFE_INTEGER(9007199254740991) 和 Number.MIN_SAFE_INTEGER(-9007199254740991),很明显比32位整数的范围(-231)(-2147483648) 到 (231 - 1)(2147483647) 大,则不需要考虑安全范围,只需要在[2-31 , 231 -1]的范围外就直接返回0即可。

CODE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function reverseNumVal(numData) {
let popNum = 0,
reverseEndNum = 0;

while (numData !== 0) {
popNum = numData % 10;
numData = parseInt(numData / 10);

reverseEndNum = reverseEndNum * 10 + popNum;
}

if (reverseEndNum < -Math.pow(2, 31) || reverseEndNum > Math.pow(2, 31) - 1) {
reverseEndNum = 0;
}

return reverseEndNum;
}

总结
这个反转数字比较简单,需要注意有个数字安全值范围和符号求值求余问题(有符号的求余操作:余数的符号和被除数的符号一样,求值的符号是除数和被除数相同为正,不相同为负);