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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2011, 13:27   #1
Роза!!!
Пользователь
 
Аватар для Роза!!!
 
Регистрация: 30.04.2010
Сообщений: 15
По умолчанию Сосчитать количество единиц в двоичной записи числа i (c++)

Помогите,пожалуйста, написать программу. Сосчитать количество единиц в двоичной записи числа i.
Есть пример на Паскале, но я его не могу переделать в c++.
Код:
cnt:=0;
while(i<>0) do
begin
  i:=(i-1) and i;
  cnt:=cnt+1;
end;
______________
Название темы по правилам форума должно адекватно отражать суть решаемой задачи/проблемы.
В последующем, темы с названием наподобие "C++" будут закрываться или удаляться,
а автор такой темы будет получать штрафные баллы.
Учтите это на будущее.
__________________

Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
__________________


Модератор.

Последний раз редактировалось Serge_Bliznykov; 07.05.2011 в 16:20.
Роза!!! вне форума Ответить с цитированием
Старый 07.05.2011, 13:39   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Код:
size_t f(int number)
{
    size_t count = 0;
    for ( ; number; number >>= 1)
        if (number & 1)
           count++;
    return count;
}

________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 07.05.2011 в 16:20.
Rififi вне форума Ответить с цитированием
Старый 16.04.2016, 22:14   #3
psih_stalker
 
Регистрация: 21.07.2011
Сообщений: 5
По умолчанию Ответ с доказательством.

Некропост, но всё же.

Выше были приведены два варианта для решения подобной задачи. Первый - на Паскале - у меня обозначен как version2. Второй - у Rififi - у меня обозначен как version1. Разница в количестве итераций циклов. В случае version1 цикл проработает столько раз, сколько значащих разрядов в двоичном представлении числа. В случае version2 цикл проработает ровно столько раз, сколько единиц в этом самом представлении. Вывод: version2 работает быстрее. На большом количестве тестов может сыграть роль.

Доказательство: на примере 1000 0000 (128 в двоичной).
1) version1 произведёт восемь итераций.
i - номер итерации, n - число.

i n
1 10000000
2 1000000
3 100000
4 10000
5 1000
6 100
7 10
8 1

2) version2 произведёт лишь одну итерацию.

10000000 & (10000000 - 1) == 10000000 & 1111111 == 0

Ну и код:

Код:
size_t version1(int n) {
	size_t result = 0;
	while (n) {
		if (n & 1)
			result++;
		n >>= 1;
	}
	return result;
}
 
size_t version2(int n) {
	size_t result = 0;
	while (n) {
		n &= n - 1;
		result++;
	}
	return result;
}
psih_stalker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка в двоичной записи числа proag Помощь студентам 3 18.02.2011 13:21
подсчитать количество единиц входящий в текст LILI26092009 Помощь студентам 1 07.11.2010 09:58
Сосчитать количество dumaika Microsoft Office Excel 6 30.04.2010 12:31
вывод числа в двоичной системе jewels Общие вопросы C/C++ 12 11.03.2010 22:20