Найти длину самой длинной последовательности единиц - 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); - приостанавливает выполнение программы до тех пор, пока пользователь не нажмет любую клавишу. - В результате выполнения программы на экран будет выведено максимальное значение последовательности.