function reverseNumber(num) {
  if (typeof num !== 'number') {
    throw new Error('Invalid Argument');
  }

  let absNum = Math.abs(num);
  let reverse = 0;

  while (absNum > 0) {
    const rem = absNum % 10;
    reverse = reverse * 10 + rem;
    absNum = parseInt(absNum / 10, 10); // important to get whole number
  }

  return reverse * Math.sign(num);
}

/**
 * 
 * Given a 32-bit signed integer, reverse digits of an integer.

  Example 1:

  Input: 123
  Output: 321
  Example 2:

  Input: -123
  Output: -321
  Example 3:

  Input: 1534236469
  Output: 0 // overflows
  Note:
  Assume we are dealing with an environment which could only 
  store integers within the 32-bit signed integer range: [−2^31,  2^31 − 1]. 
  For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
 */

function reverse32BitInt(x) {
  let isNegetive = 0;
  if (x < 0) {
    x *= -1;
    isNegetive = 1;
  }
  let reverse = 0;
  while (x >= 1) {
    const r = Math.floor(x % 10);
    reverse = reverse * 10 + r;
    x = Math.floor(x / 10);
  }
  if (reverse > 0x7fffffff) {
    return 0;
  }
  return isNegetive ? reverse * -1 : reverse;
}

module.exports = {
  reverseNumber,
  reverse32BitInt
};