Задача «Бинарные числа»? Решаю данную олимпиадную задачу:Задано целое число 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. Пробовал решить по разному, добавлять какие-то условия, но всегда проваливается решение на каком-то тесте. Что не так?
Проблема в том, что ваше решение не учитывает случай, когда число 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.
Теперь ваше решение должно правильно работать для всех случаев.
Проблема в том, что ваше решение не учитывает случай, когда число N равно 0 или 1. Также необходимо добавить проверку на отрицательные числа.
Вот исправленное решение:
varN: 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.
Теперь ваше решение должно правильно работать для всех случаев.