问题 1256. -- Roman Numbers

1256: Roman Numbers

时间限制: 1 Sec  内存限制: 128 MB
提交: 22  解决: 16
[提交][状态][讨论版]

题目描述

把小于 4000 的正整数转换成相应的罗马数字。

罗马数字共有7个,即Ⅰ(1)、Ⅴ(5)、Ⅹ(10)、Ⅼ(50)、Ⅽ(100)、Ⅾ(500)和Ⅿ(1000)。按照下述的规则可以表示任意小于4000的正整数。

    重复数次:一个罗马数字重复几次,就表示这个数的几倍。

    右加左减:
        在较大的罗马数字的右边记上较小的罗马数字,表示大数字加小数字。
        在较大的罗马数字的左边记上较小的罗马数字,表示大数字减小数字。
        左减的数字有限制,仅限于I、X、C。比如45不可以写成VL,只能是XLV
        但是,左减时不可跨越一个位值。比如,99不可以用IC(100-1)表示,而是用XCIX([100-10]+[10-1])表示。(等同于阿拉伯数字每位数字分别表示。)
        左减数字必须为一位,比如8写成VIII,而非IIX。
        右加数字不可连续超过三位,比如14写成XIV,而非XIIII。(见下方“数码限制”一项。)

    数码限制:
        同一数码最多只能连续出现三次,如40不可表示为XXXX,而要表示为XL。

输入

多组数据,每组数据一行,一个小于4000的正整数。

输出

对于每组数据,输出一行,相应的罗马数字。

样例输入

3
6
14
199
1437

样例输出

III
VI
XIV
CXCIX
MCDXXXVII

提示

条条大路通罗马。

来源

[提交][状态][讨论版]