Вывести все десятичные числа, в двоичной записи которых число нулей на 2 превосходит число единиц - C (СИ)

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

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

Доброго времени суток! Долго уже мучаюсь с задачкой, для которой необходимо написать код на Си, чтобы "вывести все десятичные числа A (300<А<800), в двоичной записи которых число нулей на 2 превосходит число единиц". Предполагается, что все числа при выполнении программы, удовлетворяющие условию, должны будут вывестись сами (т.е. не надо вводить число с клавиатуры, чтобы проверить подходит ли оно заданному условию!) Буду благодарна, если сможете помочь! Заранее спасибо

Решение задачи: «Вывести все десятичные числа, в двоичной записи которых число нулей на 2 превосходит число единиц»

textual
Листинг программы
#include <stdio.h>
 
#define LO (300)
#define HI (800)
 
char * binstr(int n) {
    static char buf[BUFSIZ];
    char * head, * tail, tmp;
    
    for ( tail = buf; n; n >>= 1 )
        *tail++ = '0' + ( n & 1 );
    *tail = '\0';
    
    for ( head = buf, tail -= 1; head < tail; ++head, --tail ) {
        tmp = *head;
        *head = *tail;
        *tail = tmp;
    }
    
    return buf;
}
 
int main(void) {
    int n, allbits, setbits, i;
    
    for ( i = LO; i < HI; ++i ) {
        for ( n = i, allbits = setbits = 0; n; n >>= 1, allbits += 1 )
            setbits += n & 1;
        if ( allbits - setbits == setbits + 2 )
            printf("%d => %s\n", i, binstr(i));
    }
    
    return 0;
}

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

  1. Подключаем стандартную библиотеку для работы с консолью.
  2. Определяем границы диапазона для перебора чисел.
  3. Создаём функцию binstr(int n), которая преобразует десятичное число n в двоичную строку, записывая её в статическую буферную строку buf.
  4. В функции main() перебираем числа от LO до HI (включительно).
  5. Для каждого числа вычисляем количество всех бит (allbits) и количество установленных бит (setbits).
  6. Если количество нулей на 2 больше, чем количество единиц, то выводим число и его двоичное представление.
  7. Возвращаем 0, чтобы указать, что программа успешно завершилась.

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


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

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

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