【发布时间】:2018-05-15 22:54:57
【问题描述】:
我在做一些编码挑战,遇到了一些我不太熟悉的东西。我更想知道它是什么以及它为什么存在。
提示很简单:
给定一个 32 位有符号整数,反转整数的数字。
Example:
Input: -123
Output: -321
Example:
Input: 120
Output: 21
Assume we are dealing with an environment which could only hold integers within the 32-bit signed integer range. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
我想出了这个。
var reverse = function(x) {
var isNegative = false;
if(x < 0){
isNegative = true;
x *= -1;
};
var reverseX = parseInt(String(x).split('').reverse((a,b) => a - b).join(''));
if(reverseX > Math.pow(2,32)){
return 0;
}
if(isNegative){
return -1 * reverseX
} else {
return reverseX;
}
};
但是,我对一些失败的测试感到困惑:
Input:
1563847412
Output:
2147483651
Expected: 0
据我了解,32 位整数是 2^32。它在 JS 中的意义是什么?如果我开始复习会发生什么? (2^32 + 1)
如果我可以问两个,我的第二个问题是,如果 reverseX 的值超过 2^32,我是否“预期”,但它仍然未通过测试。
if (reverseX > Math.pow(2, 32)) {
return 0;
}
当我超过 32 位整数时,如何正确返回 0?
【问题讨论】:
-
整数溢出:xkcd.com/571
-
改变 Math.pow(2, 32) 应该是 Math.pow(2, 31) -1
标签: javascript integer