Program n_1;
uses math;
var i, n, m, a, kol, j:int64;
begin
readln(n);
kol:=0;
a:=n;
while a<>0 do begin
a:=a div 10;
kol:=kol+1;
end;
m:=n mod 100;
for i:=1 to kol-1 do begin
if((n div 10) mod 100 > m) then m:=(n div 10) mod 100;
n:=m div 10;
end;
writeln(m);
end.
Решение чисто математическое. Думаю через строковый тип данных работать будет намного проще.
===== PascalABC.NET =====
begin
var a := MatrRandom(6, 6, -20, 20);
a.Println(4);
a.ElementsByRow
.GroupBy(p -> p)
.Where(p -> p.Count > 1)
.MaxBy(p-> p.Key)
.Distinct
.Println
end.
Целые положительные представляются в компьютере в формате с фиксированной запятой.
Отрицательные с помощью дополнительного кода.
14:
14(10) = 8+4+2 = 1110(2)
В 8-разрядной ячейке: 00001110
В знаковом (старшем) разряде положительного числа - значение "0".
Обратный и дополнительный код положительного числа совпадает с прямым кодом.
-31:
31 = 16+8+4+2+1 = 11111(2)
В 8-разрядной ячейке: 00011111
Получим обратный код отрицательного числа, заменив все цифры на противоположные (0 на 1, 1 на 0): 11100000
В знаковом (старшем) разряде отрицательного числа - значение "1".
Получим дополнительный код отрицательного числа, добавив 1 к младшему разряду: 11100000+1 = 11100001
Выполним сложение: 00001110+11100001 = 11101111
В результате сложения получили отрицательное число (в старшем разряде "1").
Определим абсолютную величину этого числа.
Вычтем 1: 11101111-1 = 11101110
Заменим все цифры на противоположные: 00010001
00010001 = 2^4+2^1 = 16+1 = 17
Итак, с учётом знака "-", получили результат -17
14+(-31) = -17