Задача «Бинарные числа»? Решаю данную олимпиадную задачу:Задано целое число N. Требуется определить, является ли оно бинарным.
Входные данные
Входной файл INPUT.TXT содержит единственное целое число N, не превосходящее 10000 по абсолютной величине.
Выходные данные
В выходной файл OUTPUT.TXT выведите YES, если заданное число является бинарным, и NO в противном случае.
Вот мое решение:var N,k: integer;
begin
read(N);
while(N > 1) do
begin
if(N mod 2 = 1) then
begin
write('NO');
exit();
end;
if(N mod 2 = 0) then
begin
N:=N div 2;
end;
end;
write('YES');
end.
Пробовал решить по разному, добавлять какие-то условия, но всегда проваливается решение на каком-то тесте.
Что не так?

11 Дек 2019 в 19:53
338 +1
0
Ответы
1

Проблема в том, что ваше решение не учитывает случай, когда число N равно 0 или 1. Также необходимо добавить проверку на отрицательные числа.

Вот исправленное решение:

var
N: integer;
begin
read(N);
if (N < 0) then
begin
write('NO');
exit();
end;
if (N = 0) or (N = 1) then
begin
write('YES');
exit();
end;
while (N > 1) do
begin
if (N mod 2 = 1) then
begin
write('NO');
exit();
end;
N := N div 2;
end;
write('YES');
end.

Теперь ваше решение должно правильно работать для всех случаев.

18 Апр в 23:39
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир