Задать вопрос
@DrWebFree

Почему получился бесконечный цикл?

Вот код:
<html>
 <head>
  <meta charset="UTF-8">
  <title>Системы счисления</title>
 </head>
 <body>
    <script type="text/javascript">
     function per(){
      var d;
      var s;
      var a = document.getElementById("1").value;
      while(a != 1){
       d = a%2;
       s = ""+s+d;
       a = a/2;
      }
      document.getElementById("2").innerHTML = s;
     }
    </script>
    <input type="text" id="1"><button onclick="per()">вычислить</button>
    <p id="2"></p>
 </body>
</html>

По идее это перевод из 10-ичной в 2-ичную систему счисления, но при нажатии кнопки, она нажимается и остаётся нажатой, как при бесконечном цикле
  • Вопрос задан
  • 109 просмотров
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Академия Эдюсон
    Fullstack-разработчик на JavaScript + ИИ
    11 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Инженер по тестированию + ИИ
    6 месяцев
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Очевидно, потому что переменная a никак не может принять значение, равное единице. Начните с 7, например. Сколько раз надо 7 разделить на 2, чтобы получить 1? Вот-вот.

И почему цикл крутится до единицы - её что, обрабатывать не надо? А отрицательные числа? А что если пользователь какой-нибудь мусор введёт? А почему у элементов id такие дурацкие? - не надо там чисел. А зачем по кнопке кликать? - неудобно.

Пусть будет так:

<input id="input">
<p id="output"></p>

document.querySelector('#input').addEventListener('input', e => {
  let num = parseInt(e.target.value);
  let str = '';
  const sign = num < 0;
  num = Math.abs(num);

  if (Number.isInteger(num)) do {
    const d = num % 2;
    str = d + str;
    num = (num - d) / 2;
  } while (num);

  document.querySelector('#output').textContent = str
    ? (sign ? '-' : '') + str
    : '<< МУСОР, А НЕ ЧИСЛО >>';
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Nc_Soft
Чтобы перевести в двоичную из десятичной достаточно сделать так
13..toString(2);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы