Подсчитать количество единичек в двоичной форме числа
Задание такое:
задаётся число в десятичной форме, нужно подсчитать количество единичек в его двоичной.(число 13 - 3 единички, 12 - 2 единички)
Написала небольшой такой код, с нечетными подсчитывает правильно, с четными всегда ноль. В чем проблема, не подскажете?
#include<bits/stdc++.h>
using namespace std;
int main() {
int a, b, c, i;
cin >> a;
c = a;
i = 0;
while(c > 1){
b = a % 2;
c = c / 2;
if(b == 1){
i = i + 1;
}
}
cout << i;
return 0;
}
Ответы (3 шт):
Автор решения: Harry
→ Ссылка
Ну что ж вы все время смотрите, есть ли единичка в a, а уменьшаете c? :)
А вообще - замените весь ваш цикл while вот этим:
for(;c; c >>= 1) i += c&1;
И еще - лучше использовать не int, а unsigned int.
А вообще этот вопрос очень детально разобран здесь - не пожалейте времени, посмотрите...
Автор решения: Никита Самоуков
→ Ссылка
#include<bits/stdc++.h>
using namespace std;
int main() {
int a;
cin >> a;
int i = 0;
while(a >= 1){
if(a % 2 == 1){
i = i + 1;
}
a = a / 2;
}
cout << i;
return 0;
}
Автор решения: HolyBlackCat
→ Ссылка
В C++20 для этого есть стандартная функция:
#include <bit>
#include <iostream>
int main()
{
unsigned int a;
std::cin >> a;
std::cout << std::popcount(a) << '\n';
}