Top.Mail.Ru
Ответы

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

Напишите функцию, которая находит кол-во единиц в двойной записи числа.

По дате
По рейтингу
Аватар пользователя
Ученик

#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++.

Аватар пользователя
Ученик
1
 int f(int n){return __builtin_popcount(n);} 
Аватар пользователя
Мастер
12345
 int countOnes(int x){ 
    int r=0; 
    while(x) r+=x&1, x>>=1; 
    return r; 
} 
Аватар пользователя
Мудрец
123456789101112131415161718192021
 #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; 
} 


Видео по теме