Как преобразовать римские цифры в арабские
Delphi MMIIX
Преобразовать 2009 в MMIX легко.
Как конвертировать римские числа в их арабское представление?
Вот функции Delphi, которая выполняет эту работу:
function RomanToArabic( const romanNumber : string) : integer ; const romanChars = 'IVXLCDMvxlcdm?!#' ; decades : array [0..8] of integer = ( 0, 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000) ; OneFive : array [boolean] of byte = (1, 5) ; var newValue, oldValue : integer ; cIdx, P : byte ; begin result := 0; oldValue := 0 ; for cIdx := Length(romanNumber) downto 1 do begin P := Succ(Pos(romanNumber[cIdx], romanChars)) ; newValue := OneFive[Odd(P)] * decades[P div 2] ; if newValue = 0 then begin result := -1; Exit; end ; if newValue < oldValue then newValue := - newValue ; Inc(result, newValue) ; oldValue := newValue end ; end;
Примечание: RomanToArabic вернет -1, если параметр romanNumber написан не латинскими буквами (например, MIXKIX не является римской цифра).
Комментарии