Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

C++, программа. СРОЧНО

Антон Ученик (179), на голосовании 2 дня назад
Напишите функцию, которая находит кол-во единиц в двойной записи числа.
Голосование за лучший ответ
Зло Просветленный (39295) 1 месяц назад
 #include <iostream> 
#include <string>
#include <bitset>
#include <type_traits>

#define IS_INTEGRAL(T) typename std::enable_if< std::is_integral<T>::value >::type* = 0

template<class T>
int countBits(T byte, IS_INTEGRAL(T))
{
std::bitset<sizeof(T)*8> bs(byte);
return bs.count();
}

int main()
{
unsigned int val = 1055;
std::cout << countBits(val);

return 0;
}
больше не чат гпт ???? Мыслитель (9384) 1 месяц назад
 int countOnes(int x){ 
int r=0;
while(x) r+=x&1, x>>=1;
return r;
}
ИИ Профи (641) 1 месяц назад
 int f(int n){return __builtin_popcount(n);} 
N43v34 Pale44 Ученик (169) 1 месяц назад
#include <iostream>

// Функция для подсчета количества единиц в двоичной записи числа
int countSetBits(int n) {
int count = 0;
while (n > 0) {
n &= (n - 1); // Убирает самый правый бит, установленный в 1
count++;
}
return count;
}

int main() {
int number;

std::cout << "Введите целое число: ";
std::cin >> number;

int setBits = countSetBits(number);

std::cout << "Количество единиц в двоичной записи числа " << number << ": " << setBits << std::endl;

return 0;
}

cpp
Как это работает:

countSetBits(int n) функция:

Инициализирует count в 0 (количество единиц).
Использует цикл while (n > 0): Продолжает, пока в числе n есть хоть один установленный бит.
n &= (n - 1): Это ключевая строка, которая работает очень эффективно для подсчета единиц. Она убирает самый правый установленный бит (1) в числе n. Например:
Если n = 10 (двоичное представление 1010), то n - 1 = 9 (двоичное 1001).
n &= (n - 1) выполнит побитовое AND: 1010 & 1001 = 1000. Самый правый установленный бит был убран.
count++: Увеличивает счетчик для каждой убранной единицы.
Возвращает count.
main() функция:

Запрашивает у пользователя целое число.
Вызывает countSetBits() для подсчета единиц в двоичной записи введенного числа.
Выводит результат на экран.
Как скомпилировать и запустить:

Сохраните код: Сохраните код как, например, count_bits.cpp.

Скомпилируйте: Используйте компилятор C++ (например, g++) в командной строке:

g++ count_bits.cpp -o count_bits

bash
Запустите:

./count_bits

bash
Вам будет предложено ввести число.

Пример использования:

Если вы введете 10, программа выведет:

Количество единиц в двоичной записи числа 10: 2

Потому что двоичная запись числа 10 - 1010, в которой 2 единицы.

Преимущества этого решения:

Эффективность: Алгоритм n &= (n - 1) очень быстрый, так как количество итераций цикла равно количеству единиц в числе, а не количеству битов в его представлении. Это делает его лучше, чем простое итерирование по битам.
Простота и понятность: Код достаточно легко читается и понимается.
Стандарт C++: Использует только стандартные возможности C++, поэтому он должен работать на любой платформе с компилятором C++.
Похожие вопросы