Number

==无论什么语言整数操作都需要考虑溢出==

//simple version
var reverse = function (x) {
	let ret = 0
	while (x) {
    //x % 10无需管正负
		ret = ret * 10 + (x % 10)
    if (ret > Math.pow(2, 31) - 1 || ret < Math.pow(-2, 31)) return 0
    //强转32位有符号整数,正数向下取整,负数向上取整
		x = (x / 10) | 0
	}
	return ret
}

//advanced version
var reverse = function (x) {
	let ret = 0
	while (x !== 0) {
		//x % 10无需管正负
		ret = ret * 10 + (x % 10)
		//强转32位有符号整数,正数向下取整,负数向上取整
		x = (x / 10) | 0
	}
	//超过32位的整数转换结果不等于自身,用作溢出判断
	return (ret | 0) === ret ? ret : 0
}

Last updated