Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 22.02.2018
Сообщений: 7
1

Определить, является ли число степенью двойки

22.02.2018, 11:50. Показов 5136. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Говорят, что плохой программист – это тот, кто считает, что в одном килобайте 1000 байт, а хороший программист – это тот, кто полагает, что в одном километре 1024 метра.

Многим эта шутка понятна, так как все знают, что в процессах, связанных с информатикой и компьютерной техникой, фигурирует множество значений, выражаемых степенью двойки, то есть чисел вида 2^K, где K – некоторое неотрицательное целое число. Назовем такие числа бинарными. Это такие числа как 2, 4, 8, 16, 32 и т.д. Действительно, когда речь идет о размере памяти или о разрешении экрана монитора, то мы часто наталкиваемся на бинарные числа. Все это связано с принципом хранения информации в памяти ЭВМ.

Задано целое число N. Требуется определить, является ли оно бинарным.

Входные данные
Входной файл INPUT.TXT содержит единственное целое число N, не превосходящее 10000 по абсолютной величине.

Выходные данные
В выходной файл OUTPUT.TXT выведите YES, если заданное число является бинарным, и NO в противном случае.

Помогите найти ошибку в коде:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var
  n: integer;
 
begin
  read(n);
  if n mod 2 = 1 then
    writeln('NO')
  else if (n = 2) or (n = -2) then
    writeln('YES')
  else 
  begin
    while (n mod 2 = 0) and (n > 2) do
      n := n div 2;
    if (n = 2) or (n = -2) then
      writeln('YES')
    else
      writeln('NO');
  end;
end.
P.S. Текстовые файлы необязательны.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.02.2018, 11:50
Ответы с готовыми решениями:

Определить, является ли натуральное число N степенью двойки
Определить, является ли натуральное число N степенью двойки while

Определить, является ли число третьей степенью. Как это сделать? Спасибо заранее!
Вводится натуральное число N меньшее, чем некоторое положительное целое M. Определить, является ли...

Вводится число. Определить, является ли оно степенью двойки.
Вводится число. Определить, является ли оно степенью двойки. P.S. Сойдёт и консольный вариант! Я...

Определить является ли число степенью двух
Не получается решить задачу помогите пожалуйста.Для каждого из десяти последовательно вводимых...

8
Status 418
Эксперт Python
4577 / 2344 / 602
Регистрация: 26.11.2017
Сообщений: 5,265
Записей в блоге: 3
22.02.2018, 12:05 2
Вам лучше почитать что такое битовые операции и как представляется число вида https://www.cyberforum.ru/cgi-bin/latex.cgi?{2}^{k} в двоичной системе счисления, чем искать ошибку в коде.
1
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
22.02.2018, 12:44 3
Попробуйте так.
Pascal
1
2
3
read(n);
n:=abs(n);
if (n<>0)and(n and(n-1)=0) then write('Yes')else write('NO')
1
Status 418
Эксперт Python
4577 / 2344 / 602
Регистрация: 26.11.2017
Сообщений: 5,265
Записей в блоге: 3
22.02.2018, 12:50 4
Цитата Сообщение от Puporev Посмотреть сообщение
Попробуйте так.
в какую степень нужно возвести 2 чтобы получить -2?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
22.02.2018, 12:55 5
Понятия не имею, это к составителям задачи.
Я так понял что здесь бинарные числа это типа -64 -32 -16 -8 -4 -2 0? 2 4 8 16 32
А получают их определением является ли модуль числа степенью 2.
Кстати если 0 входит, то нужно
Pascal
1
if n and(n-1)=0
Но смысла этих чисел я тоже не понимаю.
1
0 / 0 / 0
Регистрация: 22.02.2018
Сообщений: 7
22.02.2018, 13:45  [ТС] 6
Вот ещё одно решение, но паскаль ничего не выводит при вводе числа 1024(ввожу 512, выводит 'YES', ввожу 1023, выводит 'NO', ввожу 1024, не выводит ничего):

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
function DecToBin(N: integer): String;
 
const
  binary: array[0..1] of Char = ('0', '1');
 
var
  res: String;
 
begin
  res := '';
  while n > 0 do 
  begin
    res := binary[n mod 2] + res;
    n := n div 2;
  end;
  DecToBin := res;
end;
 
//========================================
 
var
  n, k, di: integer;
  bins, ds: string;
 
begin
  ds := '1';
  read(n);
  bins := DecToBin(n);
  k := length(bins) - 1;
  for i: integer := 1 to k do
    ds := ds + '0';
  di := strtoint(ds);
  if strtoint(bins) / di = 1 then
    writeln('YES')
  else
    writeln('NO');
end.
0
Модератор
9867 / 5235 / 3306
Регистрация: 17.08.2012
Сообщений: 16,006
22.02.2018, 16:51 7
Цитата Сообщение от novi4ock Посмотреть сообщение
Вот ещё одно решение
novi4ock, а зачем? Вам же Puporev написал прекрасное решение...

Если полностью, и точно по заданию, для классического паскаля:
Pascal
1
2
3
4
5
6
7
8
9
var
  n: integer;
 
begin
  readln(n);
  if (n > 0) and (n and (n - 1) = 0)
    then writeln('YES')
    else writeln('NO')
end.
Для Pascal ABC.NET:
Pascal
1
2
3
4
begin
  var n := readlninteger;
  writeln((n > 0) and (n and (n - 1) = 0) ? 'YES' : 'NO')
end.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
22.02.2018, 17:07 8
Ой, не нравится мне приписочка
Цитата Сообщение от novi4ock Посмотреть сообщение
по абсолютной величине
. Хотя при неотрицательном K значения 2^K всегда положительны, то есть можно было написать просто: "содержит единственное целое число N, не превосходящее 10000"
0
Модератор
9867 / 5235 / 3306
Регистрация: 17.08.2012
Сообщений: 16,006
22.02.2018, 17:15 9
volvo, ну и что? Это же входные данные. Любое число, не большее нуля, не может являться степенью двойки, и, согласно заданию, в ответ на него будет выведено 'NO'. Не пойму, в чём подвох?
0
22.02.2018, 17:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.02.2018, 17:15
Помогаю со студенческими работами здесь

Является ли число 32768 степенью 2
Нужно сделать такую программку: Является ли число 32768 степенью 2. На ум ничего не приходит.

Является ли число степенью двойки? Вводится число. Напечатать YES, если оно является степенью двойки, NO - ина
Является ли число степенью двойки? Вводится число. Напечатать YES, если оно является степенью...

Определить, является ли число степенью двойки
По заданному положительному числу n &lt; 2^64 определить, является ли оно степенью двойки. Решение...

Определить является ли число степенью двойки
Стоит задача Ввести число. Определить является ли оно степенью 2 (число 16 является, а 22 нет)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru