Ответ к задаче

Ответ к задаче


Ответ:

const reverse = (number) => {
  const reg = /(?<minus>-?)(?<digits>\d+[^0])(?:0*$)/g;

  return number.toString().replace(reg, (...args) => {
    const { minus, digits } = args.pop();
    const reversed = `${minus}${digits.split('').reverse().join('')}`;

    return -2147483648 <= reversed && reversed <= 2147483648 - 1
      ? reversed
      : '0';
  });
};

Объяснение:

С помощью именных груп в регулярном выражении разбиваем число на две части: минус и цифровая часть без нулей в конце (с помощью (?:0*$) мы отрезаем нули).

Если число отрицательное, то значение minus === '-', если положительное - minus === ''.
На следующем шаге мы делаем реверс цифровой части числа, и создаём строку с перевернутым числом. Если полученное число выходит за рамки заданного интервала - возвращаем '0', в ином случае возвращаем полученное число.


Код для проверки:

const reverse = (number) => {
  const reg = /(?<minus>-?)(?<digits>\d+[^0])(?:0*$)/g;

  return number.toString().replace(reg, (...args) => {
    const { minus, digits } = args.pop();
    const reversed = `${minus}${digits.split('').reverse().join('')}`;

    return -2147483648 <= reversed && reversed <= 2147483648 - 1
      ? reversed
      : '0';
  });
};

console.log(reverse(123)); // 321
console.log(reverse(120)); // 21
console.log(reverse(-321)); // -123
console.log(reverse(2990474529917009)); // 0




Report Page