本文整理自网络,侵删。
uRomanNumerals.pasunit uRomanNumerals;
interface
uses System.SysUtils;
type TRomanNumRange = 0..3999;
{ TRomanNum } TRomanNum = class private const NumArr: array [0..12] of record n: Integer; c: string end = ( (n: 1; c: 'I'), (n: 4; c: 'IV'), (n: 5; c: 'V'), (n: 9; c: 'IX'), (n: 10; c: 'X'), (n: 40; c: 'XL'), (n: 50; c: 'L'), (n: 90; c: 'XC'), (n: 100; c: 'C'), (n: 400; c: 'CD'), (n: 500; c: 'D'), (n: 900; c: 'CM'), (n: 1000; c: 'M')); public class function Roman(x: TRomanNumRange): string; class function Arabic(s: string): TRomanNumRange; end;
implementation
{ TRomanNum }
class function TRomanNum.Roman(x: TRomanNumRange): string;begin result := ''; var i := High(NumArr); while x > 0 do if x >= NumArr[i].n then begin result := result + NumArr[i].c; Dec(x, NumArr[i].n); end else Dec(i);end;
class function TRomanNum.Arabic(s: string): TRomanNumRange;begin result := 0; var i := High(NumArr); while s <> '' do if s.StartsWith(NumArr[i].c, True) then begin Inc(result, NumArr[i].n); s := s.Remove(0, NumArr[i].c.Length); end else begin Dec(i); if i < 0 then raise Exception.Create('Can not convert.'); end;end;end.
program RomanTest;{$APPTYPE CONSOLE}
uses System.SysUtils, uRomanNumerals;
begin Writeln(TRomanNum.Roman( 0)); // Writeln(TRomanNum.Roman( 12)); // XII Writeln(TRomanNum.Roman( 24)); // XXIV Writeln(TRomanNum.Roman( 42)); // XLII Writeln(TRomanNum.Roman( 49)); // XLIX Writeln(TRomanNum.Roman( 89)); // LXXXIX Writeln(TRomanNum.Roman( 299)); // CCXCIX Writeln(TRomanNum.Roman( 493)); // CDXCIII Writeln(TRomanNum.Roman(1960)); // MCMLX Writeln(TRomanNum.Roman(3999)); // MMMCMXCIX Writeln;
Writeln(TRomanNum.Arabic('' )); // 0 Writeln(TRomanNum.Arabic('XII' )); // 12 Writeln(TRomanNum.Arabic('XXIV' )); // 24 Writeln(TRomanNum.Arabic('XLII' )); // 42 Writeln(TRomanNum.Arabic('XLIX' )); // 49 Writeln(TRomanNum.Arabic('LXXXIX' )); // 89 Writeln(TRomanNum.Arabic('CCXCIX' )); // 299 Writeln(TRomanNum.Arabic('CDXCIII' )); // 493 Writeln(TRomanNum.Arabic('MCMLX' )); // 1960 Writeln(TRomanNum.Arabic('MMMCMXCIX')); // 3999 Readln;end.
相关阅读 >>
Delphi android windows ios通用获取程序版本
Delphi10.3通过rest单元使类和json数据互相转换
Delphi用idhttp.get访问一个网址返回403错误,但用ie浏览器访问正常
更多相关阅读请进入《Delphi》频道 >>