Показать сообщение отдельно
  #3  
Старый 11.11.2006, 22:03
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 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;
Долго тестировал, вроде работает нормально...
Ответить с цитированием