Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. Языки программирования
  4. JavaScript
  5. Как перевернуть число в JavaScript: простые способы с примерами

Как перевернуть число в JavaScript: простые способы с примерами

Запланировано Прикреплена Закрыта Перенесена JavaScript
перевернуть числоjavascript алгоритмreverse число
1 Сообщения 1 Постеры 0 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • hannadevH Не в сети
    hannadevH Не в сети
    hannadev
    написал отредактировано
    #1

    Перевернуть число в JavaScript - задача, которая часто встречается на собеседованиях или в тренировках по алгоритмам. Нужно взять число вроде 123 и получить 321, сохранив тип number. Это полезно для практики работы со строками, массивами и циклами, а также помогает понять нюансы преобразований данных.

    Проблема возникает с отрицательными числами или ведущими нулями, например, 1000 должно стать 1, а не 0001. Мы разберем проверенные методы, чтобы избежать ошибок и выбрать оптимальный подход для вашего кода.

    Метод 1: Через преобразование в строку и встроенные методы

    Самый быстрый способ - превратить число в строку, разбить на массив символов, перевернуть его и собрать обратно в число. Это использует toString(), spread-оператор […] и методы reverse() с join(). Подход работает для положительных чисел мгновенно, но требует доработки для отрицательных.

    Рассмотрим пример: число 12345. После toString() получается “12345”, spread делает массив [‘1’,‘2’,‘3’,‘4’,‘5’], reverse() меняет на [‘5’,‘4’,‘3’,‘2’,‘1’], join(‘’) дает “54321”, а Number() возвращает 54321. Легко и читаемо, но будьте осторожны с нулями - 100 станет “001”, что превратится в 1.

    • Шаг 1: num.toString() - число в строку.
    • Шаг 2: [...str] или str.split('') - строка в массив символов.
    • Шаг 3: .reverse() - переворот массива на месте.
    • Шаг 4: .join('') - массив в строку.
    • Шаг 5: Number() или + - обратно в число.
    function reverseNumber(num) {
      return +num.toString().split('').reverse().join('');
    }
    console.log(reverseNumber(12345)); // 54321
    
    Входное число Результат Проблемы
    123 321 Нет
    100 1 Удалены нули
    -123 321 Потерян знак

    Метод 2: Математический алгоритм без строк

    Здесь мы работаем только с числами, извлекая цифры через остаток от деления и строя новое число. Используем цикл while, num % 10 для последней цифры и Math.trunc(num / 10) для удаления ее. Это эффективно по памяти и работает с отрицательными числами при доработке.

    Пример для 123: result = 0, num % 10 = 3, num = 12; result = 30 + 2 = 32, num = 1; result = 320 + 1 = 321. Преимущество - нет преобразований типов, но нужно обрабатывать знак отдельно с Math.abs() и возвращать с минусом.

    • Цикл while (num): Пока число не 0.
    • result = result * 10 + (num % 10): Добавляем цифру впереди.
    • num = Math.trunc(num / 10): Сдвигаем цифры.
    • Обработка знака: Если num < 0, умножаем на -1.
    function reverseNumber(num) {
      let result = 0;
      num = Math.abs(num);
      while (num) {
        result = result * 10 + (num % 10);
        num = Math.trunc(num / 10);
      }
      return num < 0 ? -result : result;
    }
    console.log(reverseNumber(-123)); // -321
    
    Преимущества Недостатки Сложность
    Быстро по памяти Цикл сложнее понять O(n)
    Работает с отрицательными Не для очень больших чисел Низкая

    Метод 3: Цикл for и рекурсия для продвинутых

    Цикл for проходит строку с конца к началу, строя результат. Рекурсия же берет первую и последнюю цифры, вызывая себя для подстроки. Первый вариант проще, второй - элегантен, но рискован для больших чисел из-за стека вызовов.

    Для 123 в for: i=2, res=‘3’; i=1, res=‘23’; i=0, res=‘321’. Рекурсия: reverse(‘123’) = ‘3’ + reverse(‘12’) = ‘321’. Подходит для обучения алгоритмам.

    • For с toString(): for (let i = str.length - 1; i >= 0; i--).
    • Рекурсия: if (str === '') return ''; return str.slice(-1) + reverse(str.slice(0,-1));.
    • Преобразование: Number(result).
    function reverseFor(num) {
      let str = num.toString();
      let res = '';
      for (let i = str.length - 1; i >= 0; i--) {
        res += str[i];
      }
      return +res;
    }
    

    Сравнение производительности и выбор метода

    Метод Скорость Читаемость Отрицательные Объем кода
    Строки + reverse Высокая Отличная С доработкой Минимальный
    Математика Высокая Средняя Да Средний
    For/Рекурсия Средняя Хорошая С доработкой Больше

    Выберите строки для простоты, математику для эффективности. Тестируйте на edge-кейсах вроде 0 или 10^15.

    Когда строки дают преимущество

    Строки выигрывают в современном JS из-за оптимизаций V8. Но для чистого алгоритма берите цикл. Подумайте о палиндромах - легко проверить равенством num и reverse(num). Дальше можно добавить обработку дробных чисел или больших целых с BigInt.

    1 ответ Последний ответ
    0

    Категории

    • Главная
    • Новости
    • Фронтенд
    • Бекенд
    • Языки программирования

    Контакты

    • Сотрудничество
    • info@exlends.com
    • Наш чат
    • Наш ТГ канал

    © 2024 - 2026 ExLends, Inc. Все права защищены.

    Политика конфиденциальности
    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Лента
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы