11#include " sequence.h"
22
33// подсчет количества значащих бит в числе
4- int count_bits (unsigned long long N) {
5- int i = 2 , p = 1 ;
4+ int count_bits (unsigned long long N)
5+ {
6+ int i = 2 , bits = 1 ;
67 // определяем минимальную но достаточную..
78 // степень двойки (= кол-во бит)
8- while (N >= i) {
9+ while (N >= i)
10+ {
911 // увеличиваем количество бит
10- p += 1 ;
12+ bits += 1 ;
1113 // максимально возможное число при данном
1214 // количестве бит теперь в 2 раза больше
1315 i *= 2 ;
1416 }
15- return p ;
17+ return bits ;
1618}
1719
20+ // 32 100000 2^5
21+ // 31 011111 2^4
22+
1823// конвертация uint64 в массив бит
19- char *dtoab (unsigned long long N) {
24+ char *dtoab (unsigned long long N)
25+ {
2026 // определяем количество бит в числе
2127 int len = count_bits (N);
2228 // создаем массив для хранения бит
23- char *arr = (char *) malloc ((len + 1 ) * sizeof (char ));
29+ char *arr = (char *)malloc ((len + 1 ) * sizeof (char ));
2430
2531 // записываем биты в массив (в правильном порядке)
26- for (int i = 0 ; i < len; i++) {
32+ // слева направо, от старшего бита к младшему
33+ for (int i = 0 ; i < len; i++)
34+ {
2735 // записываем бит как char ('0' / '1')
2836 arr[len - i - 1 ] = ' 0' + (N & 1 );
2937 // сдвигаем чтобы получить следующий бит
@@ -37,18 +45,23 @@ char *dtoab(unsigned long long N) {
3745
3846// нахождение длины максимальной
3947// последовательности из единиц
40- int count_max_ones (unsigned long long N) {
48+ int count_max_ones (unsigned long long N)
49+ {
4150 // преобразуем число в двоичную строку
42- char *bin = dtoab (N);
51+ char *str = dtoab (N);
4352 int max = 0 , current = 0 ;
4453
4554 // проходимся по всем битам числа
46- for (int i = 0 ; bin[i] != 0 ; i++) {
55+ for (int i = 0 ; str[i] != 0 ; i++)
56+ {
4757 // current = bin[i] == '1' ? current + 1 : 0;
48- if (bin[i] == ' 1' ) {
58+ if (str[i] == ' 1' )
59+ {
4960 current += 1 ;
50- } else {
51- current = 0 ;
61+ }
62+ else
63+ {
64+ current = 0 ;
5265 }
5366 // обновляем максимальную длину
5467 // max = current > max ? current : max;
0 commit comments