Серокой> Задача со звёздочкой при обучении Бейсику в школе...
Ну, там просто надо контекст ненмого учитывать. И это и была изюминка. Потратили достаточно много времени, да. Я дал возможность им придумать алгоритм, а потом его разбирали и анализировали.
Серокой> Рука же с половиной порядка пальцев?
Не совсем. На руке 5 пальцев и 4 показывают 4-мя пальцами, а 5 пятью. А тут более трёх символов в ряд нельзя. Причина, ИМХО, однозначность записи и длина записи, как и в десятичной системе 4.(9)=5.0 и записывать принято 5.0. Но это оговорено. Здесь чуть более развито — после третьего использования идёт следующий символ с символом предыдущим до него.
I, II, III, IIII -> IV, V, VI, VII, VIII, VIIII->IX
XXXVIII, XXXIX, XL
I — 1
V — 5
X — 10
L — 50
C — 100
D — 500
M — 1,000
900 = 500+100+100+100+100 — слишком длинно, поэтому 900=1,000-100.
Ну и жадный алгоритм работает — 1987, к примеру. Сколько 1,000 можно всунуть в 1987 — одну, значит пишем "M", остаток 987. Сколько 500 можно всунуть? Одну пишем D, остаток 487. Сколько соток можно всунуть? 4 — слишком длинно, значит заменяетм DCCCC на CM и уже получилось "MCM". В остатке 87 — это L с хвостиком. "MCML" и 37 в остатке. Окончательно: MCMLXXXVII.
При обратном преобразовании нельзя сразу же добавлять, а нужно заглянуть на символ вперёд. Если этот следующий символ больше по значению, чем предыдущий, то из большого надо отнять меньший и результат добавить к сумме.