Найти длину самой длинной последовательности единиц - 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");
- }
Объяснение кода листинга программы
В этом коде:
- #include
, #include , #include - подключают необходимые библиотеки для работы с консолью, системой и вводом/выводом данных. - void main (void) - объявляет функцию main, которая является точкой входа в программу.
- setlocale(0,
russian
); - задает русскую локаль для работы с консолью. - unsigned int N; - объявляет переменную N типа unsigned int (беззнаковое целое) для хранения числа, введенного пользователем.
- int i = 0;, int max = 0; - объявляют переменные i и max типа int (целое) для хранения счетчика и максимального значения последовательности соответственно.
- printf(
Введите число:
); - выводит сообщение с просьбой ввести число. - scanf(
%d
,&N); - считывает введенное пользователем число в переменную N. - while(N != 0) - организует цикл, который будет выполняться до тех пор, пока N не станет равным нулю.
- if(N % 2) - проверяет правый бит числа N. Если он равен 1, то увеличивается счетчик i.
- i++; - увеличивает значение счетчика i на 1.
- if(i > max) - проверяет, не превышает ли текущее значение счетчика i максимальное значение, хранящееся в переменной max.
- max = i; - обновляет значение переменной max, если текущее значение счетчика i больше.
- N = N / 2; - сдвигает число N вправо на один бит.
- printf(
%d
,max); - выводит максимальное значение последовательности. - system(
pause
); - приостанавливает выполнение программы до тех пор, пока пользователь не нажмет любую клавишу. - В результате выполнения программы на экран будет выведено максимальное значение последовательности.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д