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