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

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

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

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

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

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. #define LO (300)
  4. #define HI (800)
  5.  
  6. char * binstr(int n) {
  7.     static char buf[BUFSIZ];
  8.     char * head, * tail, tmp;
  9.    
  10.     for ( tail = buf; n; n >>= 1 )
  11.         *tail++ = '0' + ( n & 1 );
  12.     *tail = '\0';
  13.    
  14.     for ( head = buf, tail -= 1; head < tail; ++head, --tail ) {
  15.         tmp = *head;
  16.         *head = *tail;
  17.         *tail = tmp;
  18.     }
  19.    
  20.     return buf;
  21. }
  22.  
  23. int main(void) {
  24.     int n, allbits, setbits, i;
  25.    
  26.     for ( i = LO; i < HI; ++i ) {
  27.         for ( n = i, allbits = setbits = 0; n; n >>= 1, allbits += 1 )
  28.             setbits += n & 1;
  29.         if ( allbits - setbits == setbits + 2 )
  30.             printf("%d => %s\n", i, binstr(i));
  31.     }
  32.    
  33.     return 0;
  34. }

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

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

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


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

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

10   голосов , оценка 3.9 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы