Вывести числа из диапазона от n до m, в двоичном представлении которых ровно k разрядов установленных в «01» - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Есть задача:Вывести числа из диапазона от n до m , в двоичном представлении которых ровно k разрядов установленных в «01». Число k, n, m вводится пользователем. Использовать операции сдвига и побитового умножения. Объясните с чего начать Более простые задачи типа " выведете из диапазона те числа,в которых количество единиц (в двоичном представлении) нечетное" решаю, а в этой тупняк. Не понимаю с чего начать и что обозначает фраза "ровно k разрядов установленных в «01»" Заранее спасибо

Решение задачи: «Вывести числа из диапазона от n до m, в двоичном представлении которых ровно k разрядов установленных в «01»»

textual
Листинг программы
#include<stdio.h>
 
int main(void)
{
    int n,m,k,cnt,i,d;
    printf("%s","Enter n:");
    scanf("%i",&n);
    printf("%s","Enter m:");
    scanf("%i",&m);
    printf("%s","Enter k:");
    scanf("%i",&k);
    for(i=n;i<m+1;i++)
    {
        cnt=0;
        d=i;
        while(d!=0)
        {
            if(d&1) cnt++;
            d=d>>1;
        }
        if(cnt==k) printf("%i\n",i);
    }
    getchar();
    return 0;
}

Объяснение кода листинга программы

В этом коде:

  1. Вводятся значения переменных n, m, k с помощью функции scanf().
  2. Создается цикл от n до m с шагом 1, то есть с 10-ичной системой исчисления это будет диапазон от n до m включительно.
  3. Внутри цикла инициализируется счётчик cnt = 0, а также переменная d, которая итерируется от i до 0 (для справа налево).
  4. Внутри цикла в то время как d больше 0 (то есть пока в числе d есть разряды от 1 до k) с помощью операции побитового И (AND) проверяется, является ли k-й разряд числа d равным 1. Если это так, то значение счётчика cnt увеличивается на 1.
  5. Внутри цикла переменная d сдвигается вправо на 1 разряд (d = d >> 1).
  6. Цикл продолжается до тех пор, пока в числе d не останется 0.
  7. Если количество разрядов, равных 1, равно k, то число i выводится на экран с помощью функции printf().
  8. После окончания цикла запрашивается ввод (getchar()) и программа завершается, возвращая 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5
Похожие ответы