
11.11.2006, 22:03
|
 |
Местный
|
|
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
|
|
А вот и обратная функция
Код:
function RomanToInt( num: string ): integer;
const
N = 13;
vals: array [1..N] of word =
( 4, 9, 40, 90, 400, 900, 1, 5, 10, 50, 100, 500, 1000 );
roms: array [1..N] of string[2] =
( 'IV', 'IX', 'XL', 'XC', 'CD', 'CM', 'I', 'V', 'X', 'L', 'C', 'D', 'M' );
var
i: integer;
begin
Result := 0;
while Length( num ) > 0 do
begin
for i := Low( roms ) to High( roms ) do
if AnsiUpperCase( Copy( num, 1, Length( roms[i] ) ) ) = roms[i] then
begin
Inc( Result, vals[i] );
Delete( num, 1, Length( roms[i] ) );
Break;
end;
end;
end;
Долго тестировал, вроде работает нормально...
|