<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Как перевернуть число в JavaScript: простые способы с примерами]]></title><description><![CDATA[<p dir="auto">Перевернуть число в JavaScript - задача, которая часто встречается на собеседованиях или в тренировках по алгоритмам. Нужно взять число вроде 123 и получить 321, сохранив тип number. Это полезно для практики работы со строками, массивами и циклами, а также помогает понять нюансы преобразований данных.</p>
<p dir="auto">Проблема возникает с отрицательными числами или ведущими нулями, например, 1000 должно стать 1, а не 0001. Мы разберем проверенные методы, чтобы избежать ошибок и выбрать оптимальный подход для вашего кода.</p>
<h2>Метод 1: Через преобразование в строку и встроенные методы</h2>
<p dir="auto">Самый быстрый способ - превратить число в строку, разбить на массив символов, перевернуть его и собрать обратно в число. Это использует <strong>toString()</strong>, spread-оператор **** и методы <strong>reverse()</strong> с <strong>join()</strong>. Подход работает для положительных чисел мгновенно, но требует доработки для отрицательных.</p>
<p dir="auto">Рассмотрим пример: число 12345. После toString() получается “12345”, spread делает массив [‘1’,‘2’,‘3’,‘4’,‘5’], reverse() меняет на [‘5’,‘4’,‘3’,‘2’,‘1’], join(‘’) дает “54321”, а Number() возвращает 54321. Легко и читаемо, но <em>будьте осторожны с нулями - 100 станет “001”, что превратится в 1</em>.</p>
<ul>
<li><strong>Шаг 1</strong>: <code>num.toString()</code> - число в строку.</li>
<li><strong>Шаг 2</strong>: <code>[...str]</code> или <code>str.split('')</code> - строка в массив символов.</li>
<li><strong>Шаг 3</strong>: <code>.reverse()</code> - переворот массива на месте.</li>
<li><strong>Шаг 4</strong>: <code>.join('')</code> - массив в строку.</li>
<li><strong>Шаг 5</strong>: <code>Number()</code> или <code>+</code> - обратно в число.</li>
</ul>
<pre><code class="language-javascript">function reverseNumber(num) {
  return +num.toString().split('').reverse().join('');
}
console.log(reverseNumber(12345)); // 54321
</code></pre>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Входное число</th>
<th>Результат</th>
<th>Проблемы</th>
</tr>
</thead>
<tbody>
<tr>
<td>123</td>
<td>321</td>
<td>Нет</td>
</tr>
<tr>
<td>100</td>
<td>1</td>
<td>Удалены нули</td>
</tr>
<tr>
<td>-123</td>
<td>321</td>
<td>Потерян знак</td>
</tr>
</tbody>
</table>
<h2>Метод 2: Математический алгоритм без строк</h2>
<p dir="auto">Здесь мы работаем только с числами, извлекая цифры через остаток от деления и строя новое число. Используем цикл while, <strong>num % 10</strong> для последней цифры и <strong>Math.trunc(num / 10)</strong> для удаления ее. Это эффективно по памяти и работает с отрицательными числами при доработке.</p>
<p dir="auto">Пример для 123: result = 0, num % 10 = 3, num = 12; result = 30 + 2 = 32, num = 1; result = 320 + 1 = 321. <em>Преимущество - нет преобразований типов</em>, но нужно обрабатывать знак отдельно с Math.abs() и возвращать с минусом.</p>
<ul>
<li><strong>Цикл while (num)</strong>: Пока число не 0.</li>
<li><strong>result = result * 10 + (num % 10)</strong>: Добавляем цифру впереди.</li>
<li><strong>num = Math.trunc(num / 10)</strong>: Сдвигаем цифры.</li>
<li><strong>Обработка знака</strong>: Если num &lt; 0, умножаем на -1.</li>
</ul>
<pre><code class="language-javascript">function reverseNumber(num) {
  let result = 0;
  num = Math.abs(num);
  while (num) {
    result = result * 10 + (num % 10);
    num = Math.trunc(num / 10);
  }
  return num &lt; 0 ? -result : result;
}
console.log(reverseNumber(-123)); // -321
</code></pre>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Преимущества</th>
<th>Недостатки</th>
<th>Сложность</th>
</tr>
</thead>
<tbody>
<tr>
<td>Быстро по памяти</td>
<td>Цикл сложнее понять</td>
<td>O(n)</td>
</tr>
<tr>
<td>Работает с отрицательными</td>
<td>Не для очень больших чисел</td>
<td>Низкая</td>
</tr>
</tbody>
</table>
<h2>Метод 3: Цикл for и рекурсия для продвинутых</h2>
<p dir="auto">Цикл for проходит строку с конца к началу, строя результат. Рекурсия же берет первую и последнюю цифры, вызывая себя для подстроки. Первый вариант проще, второй - элегантен, но <em>рискован для больших чисел из-за стека вызовов</em>.</p>
<p dir="auto">Для 123 в for: i=2, res=‘3’; i=1, res=‘23’; i=0, res=‘321’. Рекурсия: reverse(‘123’) = ‘3’ + reverse(‘12’) = ‘321’. Подходит для обучения алгоритмам.</p>
<ul>
<li><strong>For с toString()</strong>: <code>for (let i = str.length - 1; i &gt;= 0; i--)</code>.</li>
<li><strong>Рекурсия</strong>: <code>if (str === '') return ''; return str.slice(-1) + reverse(str.slice(0,-1));</code>.</li>
<li><strong>Преобразование</strong>: Number(result).</li>
</ul>
<pre><code class="language-javascript">function reverseFor(num) {
  let str = num.toString();
  let res = '';
  for (let i = str.length - 1; i &gt;= 0; i--) {
    res += str[i];
  }
  return +res;
}
</code></pre>
<h2>Сравнение производительности и выбор метода</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Метод</th>
<th>Скорость</th>
<th>Читаемость</th>
<th>Отрицательные</th>
<th>Объем кода</th>
</tr>
</thead>
<tbody>
<tr>
<td>Строки + reverse</td>
<td>Высокая</td>
<td>Отличная</td>
<td>С доработкой</td>
<td>Минимальный</td>
</tr>
<tr>
<td>Математика</td>
<td>Высокая</td>
<td>Средняя</td>
<td>Да</td>
<td>Средний</td>
</tr>
<tr>
<td>For/Рекурсия</td>
<td>Средняя</td>
<td>Хорошая</td>
<td>С доработкой</td>
<td>Больше</td>
</tr>
</tbody>
</table>
<p dir="auto">Выберите строки для простоты, математику для эффективности. Тестируйте на edge-кейсах вроде 0 или 10^15.</p>
<h2>Когда строки дают преимущество</h2>
<p dir="auto">Строки выигрывают в современном JS из-за оптимизаций V8. Но для чистого алгоритма берите цикл. Подумайте о палиндромах - легко проверить равенством num и reverse(num). Дальше можно добавить обработку дробных чисел или больших целых с BigInt.</p>
]]></description><link>https://forum.exlends.ru/topic/826/kak-perevernut-chislo-v-javascript-prostye-sposoby-s-primerami</link><generator>RSS for Node</generator><lastBuildDate>Sat, 17 Oct 2026 03:39:32 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/826.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 27 Feb 2026 15:02:29 GMT</pubDate><ttl>60</ttl></channel></rss>