Дан цифровой массив , посчитать сколько двоичных единиц содержит каждое число.
если не затруднит можно весь программный код
Цифровой массив
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
"Весь программный код" не затруднит, но тогда не будет видно твоего участия. В этом разделе мы помогаем, а не выдаём готовые решения. Ради вас самих, между прочим.
Для того, чтобы посчитать количество единиц в двоичном представлении числа, нужно сделать следующее:
1. Узнать есть ли в конце числа единица и если есть, то увеличить счётчки единиц. Для того, чтобы узнать есть ли в конце единица, нужно наложить на число битовую маску 1. Если число было n, то итоговая конструкция будет иметь вид (n & 1). Её-то и нужно проверять на равенство нулю или единице.
2. Если исходное число не ноль, то сдвинуть его на один бит вправо и перейти на пункт №1. Сдвиг осуществляется через оператор >>. Итоговая конструкция будет иметь вид (n = n >> 1).
3. Если исходное число ноль, то конец цикла.
Этот алгоритм следует применить для каждого элемента "цифрового массива".
Для того, чтобы посчитать количество единиц в двоичном представлении числа, нужно сделать следующее:
1. Узнать есть ли в конце числа единица и если есть, то увеличить счётчки единиц. Для того, чтобы узнать есть ли в конце единица, нужно наложить на число битовую маску 1. Если число было n, то итоговая конструкция будет иметь вид (n & 1). Её-то и нужно проверять на равенство нулю или единице.
2. Если исходное число не ноль, то сдвинуть его на один бит вправо и перейти на пункт №1. Сдвиг осуществляется через оператор >>. Итоговая конструкция будет иметь вид (n = n >> 1).
3. Если исходное число ноль, то конец цикла.
Этот алгоритм следует применить для каждого элемента "цифрового массива".
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Самый лучший (с точки зрения оптимизации) способ узнать количество двоичных единиц в байтовом массиве - это составить таблицу 256х2, в которой каждому байту будет сопоставлено количество единиц. И используя ее быстренько пробежаться по массиву и посчитать сумму. По моим оценкам, это будет эффективно при любом размере массива, даже равному 1. А реализация его на асм ускорит обработку в десятки раз.
It's a long way to the top if you wanna rock'n'roll