Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2018, 21:37   #11
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Это вариант без цикла определить, что число степень двойки
типа if i and (i-1) = 0 then степень
на плюсы переделать не вижу проблем
Дык я поэтому и "снимаю шляпу". Когда писал пример, догадывался, что в одно действие можно, но мозги были заняты разговором с тёщей по скайпу. А потом и вовсе забыл.

Вот наглядный пример того, что бывает, если делать 2 дела одновременно.
Язык программирования тут дело вторичное. На С/С++ можно обойтись макросом
Код:
#define ISPOWER2(x) (x && !(x & (x - 1))) // подправил
а на паскале - инлайном
Код:
function IsPower2(x: dword): boolean; inline;
begin
  result:= (x <> 0) and (x and (x - 1) = 0); // подправил 
end;
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 12.03.2018 в 00:24.
min@y™ вне форума Ответить с цитированием
Старый 11.03.2018, 22:10   #12
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Код:
#include <fstream>
#include <iostream>
using namespace std;

size_t calc_one_bits(unsigned v)
{
    size_t res = 0;
    while (v) {
        ++res;
        v = v & (v - 1);
    }
    return res;
}

bool is_power_of2(const unsigned v)
{
    return calc_one_bits(v) == 1;
}

int main()
{
    int a;
    cin » a; // считывание из фаила
    a = abs(a);
    if (is_power_of2(a))
        cout «"YES";
    else
        cout «"NO";
}
P.S.
Только теперь увидел, что это уже разобрали :D
a.k.a. Angelicos Phosphoros
Мой сайт

Последний раз редактировалось New man; 11.03.2018 в 22:40.
New man вне форума Ответить с цитированием
Старый 11.03.2018, 23:38   #13
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Проверка не полная - в данном случае 0 тоже будет степенью двойки.

Цитата:
Сообщение от Александр121 Посмотреть сообщение
не понимаю в чём ошибка вроде все условия соблюдены.
Где все, у вас только до 8192...
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарные числа - C++ Александр121 Общие вопросы C/C++ 3 12.03.2018 01:03
Олимпиадная задача СергейАстрахань Помощь студентам 2 31.01.2013 11:48
Haskell Обыкновенные числа в бинарные kikat Помощь студентам 0 13.01.2011 18:45
Haskell Обыкновенные числа в бинарные kikat Помощь студентам 0 13.01.2011 02:12
Олимпиадная задача. _-Re@l-_ Паскаль, Turbo Pascal, PascalABC.NET 1 09.12.2010 20:53