Как преобразовать римские цифры в арабские
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 не является римской цифра).
Комментарии