11#include " sequence.h"
22
33// подсчет количества значащих бит в числе
4- int count_bits (unsigned long long N)
5- {
4+ int count_bits (unsigned long long N) {
65 int i = 2 , bits = 1 ;
76 // определяем минимальную но достаточную..
87 // степень двойки (= кол-во бит)
9- while (N >= i)
10- {
8+ while (N >= i) {
119 // увеличиваем количество бит
1210 bits += 1 ;
1311 // максимально возможное число при данном
@@ -17,21 +15,16 @@ int count_bits(unsigned long long N)
1715 return bits;
1816}
1917
20- // 32 100000 2^5
21- // 31 011111 2^4
22-
2318// конвертация uint64 в массив бит
24- char *dtoab (unsigned long long N)
25- {
19+ char *dtoab (unsigned long long N) {
2620 // определяем количество бит в числе
2721 int len = count_bits (N);
2822 // создаем массив для хранения бит
2923 char *arr = (char *)malloc ((len + 1 ) * sizeof (char ));
3024
3125 // записываем биты в массив (в правильном порядке)
3226 // слева направо, от старшего бита к младшему
33- for (int i = 0 ; i < len; i++)
34- {
27+ for (int i = 0 ; i < len; i++) {
3528 // записываем бит как char ('0' / '1')
3629 arr[len - i - 1 ] = ' 0' + (N & 1 );
3730 // сдвигаем чтобы получить следующий бит
@@ -45,28 +38,16 @@ char *dtoab(unsigned long long N)
4538
4639// нахождение длины максимальной
4740// последовательности из единиц
48- int count_max_ones (unsigned long long N)
49- {
41+ int count_max_ones (unsigned long long N) {
5042 // преобразуем число в двоичную строку
5143 char *str = dtoab (N);
5244 int max = 0 , current = 0 ;
5345
5446 // проходимся по всем битам числа
55- for (int i = 0 ; str[i] != 0 ; i++)
56- {
57- // current = bin[i] == '1' ? current + 1 : 0;
58- if (str[i] == ' 1' )
59- {
60- current += 1 ;
61- }
62- else
63- {
64- current = 0 ;
65- }
47+ for (int i = 0 ; str[i] != 0 ; i++) {
48+ current = str[i] == ' 1' ? current + 1 : 0 ;
6649 // обновляем максимальную длину
67- // max = current > max ? current : max;
68- if (current > max)
69- max = current;
50+ max = current > max ? current : max;
7051 }
7152 return max;
7253}
0 commit comments