代码存在一个问题,就是没有验证输入的罗马数字是否合法。
如果忽略这个验证,程序可以更简单些:(其中的ValidateRoman函数即为验证)
//罗马数字转阿拉伯数字 function RomanToArabic(const Roman: string): LongInt; const Arabics: array[1..13] of Integer = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1); Romans: array[1..13] of string = ('M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I'); var i: Integer; Ro: string; Longitud: Integer; sRoman: string; begin Result := 0; sRoman := UpperCase(Roman); if ValidateRoman(sRoman) then begin for i := 1 to 13 do begin Longitud := Length(Romans[i]); Ro := Copy(sRoman, 1, Longitud); while ((Length(sRoman) > 0) and (Ro = Romans[i])) do begin sRoman := Copy(sRoman, 1 + Longitud, Length(Roman) - 1); Result := Result + Arabics[i]; Ro := Copy(sRoman, 1, Longitud); end; end; end; end; |