leetcode上的一个题目,数字溢出问题

原题:https://leetcode.com/problems...

clipboard.png

测试了1534236469这个数字,不通过,估计他认为数字溢出了,但是在js中这个数字压根就没有溢出啊
代码:

/**
 * @param {number} x
 * @return {number}
 */
var reverse = function(x) {
  var s = x<0?x.toString().substring(1):x.toString();
  var arr = s.split('');
  arr.reverse();
  s = arr.join('');
  s = x<0?'-'+s:s;
  s = Number(s);
  //console.log(s,s>Number.POSITIVE_INFINITY,s<Number.NEGATIVE_INFINITY);
  return s>Number.POSITIVE_INFINITY||s<Number.NEGATIVE_INFINITY?0:s;
};
阅读 6.9k
4 个回答

Assume the input is a 32-bit integer, then the reverse of 1000000003 overflows.

你对题目理解错误,所以你的溢出代码写错。应该是

return s>Math.pow(2, 31) - 1||s<-Math.pow(2, 31)?0:s;
var x1 = x < 0 ? -1 : 1;

x = Math.abs(x) + '';

x = x.split('').reverse().join('');

if(+x > 2147483647)
    return 0;

return +x*x1

^_^ 我也提交了一发。

检测溢出的方式不对。
Number.POSITIVE_INFINITYNumber.NEGATIVE_INFINITY 均是特殊的值代表正无穷与负无穷,上面与它们比较的结果恒定都是false。

新手上路,请多包涵
  1. Number.POSITIVE_INFINITY 在JavaScript中的值为infinity,这个值非常大,infinity=Math.pow(2,1024).这远超32位的Interger变量。所以不能用这个值来作为溢出判断。
  2. 虽然1534236469这个值本身没有溢出,但是这个值逆序之后超过了2的32次方,溢出。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题