Skip to content

Commit d37ad1e

Browse files
committed
Lab 9 var 11 passed
1 parent 7c72ee8 commit d37ad1e

2 files changed

Lines changed: 15 additions & 32 deletions

File tree

Variants/Lab_9/var_11/main.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,18 @@
22
// самой длинной последовательности единиц
33
// в его двоичном представлении
44

5+
// доп: вывести кол во серий из единиц длинной больше 2
6+
57
#include "sequence.h"
68

7-
int main()
8-
{
9+
int main() {
910
// вводим N
1011
unsigned long long N;
1112
printf("Enter N: ");
1213
scanf("%llu", &N);
1314

1415
printf( // выводим результат
15-
"%llu -> bin: %s\nMax length: %d\n",
16-
N, dtoab(N), count_max_ones(N));
17-
}
16+
"%llu -> bin: %s\nMax length: %d\n",
17+
N, dtoab(N), count_max_ones(N)
18+
);
19+
}

Variants/Lab_9/var_11/sequence.cpp

Lines changed: 8 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
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

Comments
 (0)