罗马数字一
* * * *
拉格朗日计划
* * * *
罗马数字一

将给定的阿拉伯数字写成罗马数字的形式并打印。

给定的数字在1到3999之间,涉及的编码如下:

$$ \begin{matrix} 阿拉伯: & 1 & 5 & 10 & 50 & 100 & 500 & 1000 \\ 罗马:& I & V & X & L & C & D & M \end{matrix} $$
本题难度:



解答

和进制转换类似,从大到小遍历作为“量词”的1000,100等数,每次用当前数处以这些量词,商就是需要重复的次数,并把当前数更新为余数。

比较麻烦的是涉及到9和4时需要在左侧表示,否则用递归可以更短。

最终代码行有五行。

代码长度:177字节 vs. 全站第一:124字节。

import sys
for a in map(int,sys.argv[1:]):
 r=""
 for i,j in zip([1000,900,500,400,100,90,50,40,10,9,5,4,1],"M CM D CD C XC L XL X IX V IV I".split()):r+=j*(a//i);a%=i
 print(r)