Вопрос, который вызвал трудности
Дано натуральное число N. Выведите слово YES, если число N является точной степенью двойки, или слово NO в противном случае. Операцией возведения в степень пользоваться нельзя!
Ответ экспертов Учись.Ru
Чтобы дать полноценный ответ, был привлечён специалист, который хорошо разбирается в теме.
После обсуждения с другими специалистами сервиса мы пришли к выводу, что правильный ответ на ваш вопрос будет звучать следующим образом:
Var A,N:longint;
Begin
Write('N = ');ReadLn(N);
if N mod 2 = 0 then
Begin
A:=1;
While A A:=A*2;
if A=N then Write('YES')
else Write('NO')
End
else Write('NO')
End.
// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
// Внимание! Если программа не работает, обновите версию!
begin
var n:BigInteger;
if not BigInteger.TryParse(ReadlnString('n='),n) then
Writeln('Введенное не является целым числом')
else
Writeln(n.IsPowerOfTwo?'YES':'NO')
end.
Пример
n= 2037035976334486086268445688409378161051468393665936250636140449354381299763336706183397376
YES
// Внимание! Если программа не работает, обновите версию!
begin
var n:BigInteger;
if not BigInteger.TryParse(ReadlnString('n='),n) then
Writeln('Введенное не является целым числом')
else
Writeln(n.IsPowerOfTwo?'YES':'NO')
end.
Пример
n= 2037035976334486086268445688409378161051468393665936250636140449354381299763336706183397376
YES