PascalABC.NET 3.7:
###RS.AdjacentGroup.SelectMany(x → x.Len >= 3 ? x.Len + x[0] : x.Str).PrПояснение:
RS - ReadString: Возвращает значение типа string, введенное с клавиатуры.
AdjacentGroup: Группирует одинаковые подряд идущие элементы, получая последовательность массивов.
SelectMany: Проецирует каждый элемент последовательности в новую последовательность и объединяет результирующие последовательности в одну последовательность.
.Len - .Length: Длина массива.
.Str - .JoinToString: Преобразует последовательность символов в строку, не используя разделитель (при последовательность другого типа данных в качестве разделителя используется пробел).
.Pr - .Print: Выводит последовательность символов на экран, не используя разделитель (при последовательность другого типа данных в качестве разделителя используется пробел).
Пример работы:
11 1100 0101 = 3С5(16)
11 0011 0101 = 335(16)
3С5(16) - 335(16) = 90(16) ( С=12, 12-3=9)
90(16) = 9*16+0 =144(10)
Либо можете вычитать в двоичной системе
Чтобы вычесть одно число из другого в двоичной системе вычитаемое записываете в обратном коде
и добавляете к нему 1 - это дополнительный код
затем складываете первое число со вторым, записанным в дополнительном коде
1111000101 - первое число
1100110101 - второе
0011001010 - второе в обратном коде
0011001011 - второе в дополнительном коде
1111000101
+
0011001011
0010010000
сложение бит производим по обычному правилу
1+1 - результат = 0 и перенос в следующий разряд
1+0 - результат 1
Полученное в результате сложения число
0010010000(2) разобьем на группы по 4 бита
справа налево, получим шестнадцатиричное представление 90(16)=9*16+0=144(10)