Найти длину самой длинной последовательности единиц - C (СИ)

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

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

Здравствуйте, по заданию нужно "Ввести целое число N. Найти длину самой длинной последовательности единиц в его двоичном представлении" Подскажите как программа ищет эту последовательность единиц?
#include <stdio.h>
#include <Windows.h>
#include <locale.h>
void main (void)
{
 setlocale(0,"russian"); 
 unsigned int N;
 int i = 0;
 int max = 0;
 printf("Введите число:");
 scanf("%d",&N);
 while(N != 0)
 {
    if(N % 2) 
    {
        i++;
    }
      else i = 0;
        if(i > max)
            {
                max = i;
                N = N / 2;
            }
 }
 printf("%d ",max);
 system("pause");
}

Решение задачи: «Найти длину самой длинной последовательности единиц»

textual
Листинг программы
#include <stdio.h>
#include <Windows.h>
#include <locale.h>
void main (void)
{
 setlocale(0,"russian"); 
 unsigned int N;
 int i = 0;
 int max = 0;
 printf("Введите число:");
 scanf("%d",&N);
 while(N != 0) 
 {
    if(N % 2)  /* проверяет правый бит. если 1 то увеличить счетчик*/
    {
        i++;
    } else i = 0; /* иначе обнулить счетчик */
    
    if(i > max) /* еси счетчик достиг большего значения чем max то загрузить мах новым значением */
    {
      max = i;
    }
    N = N / 2; /* сместить число на 1 бит в право */
 }
 printf("%d ",max);
 system("pause");
}

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

В этом коде:

  1. #include , #include , #include - подключают необходимые библиотеки для работы с консолью, системой и вводом/выводом данных.
  2. void main (void) - объявляет функцию main, которая является точкой входа в программу.
  3. setlocale(0,russian); - задает русскую локаль для работы с консолью.
  4. unsigned int N; - объявляет переменную N типа unsigned int (беззнаковое целое) для хранения числа, введенного пользователем.
  5. int i = 0;, int max = 0; - объявляют переменные i и max типа int (целое) для хранения счетчика и максимального значения последовательности соответственно.
  6. printf(Введите число:); - выводит сообщение с просьбой ввести число.
  7. scanf(%d,&N); - считывает введенное пользователем число в переменную N.
  8. while(N != 0) - организует цикл, который будет выполняться до тех пор, пока N не станет равным нулю.
  9. if(N % 2) - проверяет правый бит числа N. Если он равен 1, то увеличивается счетчик i.
  10. i++; - увеличивает значение счетчика i на 1.
  11. if(i > max) - проверяет, не превышает ли текущее значение счетчика i максимальное значение, хранящееся в переменной max.
  12. max = i; - обновляет значение переменной max, если текущее значение счетчика i больше.
  13. N = N / 2; - сдвигает число N вправо на один бит.
  14. printf(%d,max); - выводит максимальное значение последовательности.
  15. system(pause); - приостанавливает выполнение программы до тех пор, пока пользователь не нажмет любую клавишу.
  16. В результате выполнения программы на экран будет выведено максимальное значение последовательности.

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


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

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

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