Задача «Бинарные числа»? Решаю данную олимпиадную задачу:Задано целое число 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
379 +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 Апр 2024 в 23:39
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир