/*
 * [7] 整数反转
 */

// @lc code=start
/**
 * @param {number} x
 * @return {number}
 */
var reverse = function (x) {
  // 1. 方案一
  // let cur = x;
  // let collect = []
  // let result = 0;

  // while (cur % 10 !== cur) {
  //   const num = cur % 10
  //   collect.push(num)
  //   cur = (cur - num) / 10
  // }
  // collect.push(cur)

  // let len = collect.length;
  // for (let i = 0; i < len; i++) {
  //   result += collect[i] * 10 ** (len - 1 - i)
  // }
  // if (result > 2 ** 31 - 1 || result < -(2 ** 31)) return 0
  // return result

  // 2. 更简洁的
  let ans = 0;
  while (x !== 0) {
    if (ans > (2 ** 31 - 1) || ans < -(2 ** 31)) return 0
    const num = x % 10
    ans = ans * 10 + num
    x = x > 0 ? Math.floor(x / 10) : Math.ceil(x / 10)
  }

  if (ans > (2 ** 31 - 1) || ans < -(2 ** 31)) return 0
  return ans
};

console.log(reverse(-123))
console.log(reverse(12345))
console.log(reverse(1534236469))
console.log(reverse(-2147483648))