编写一个程序,该程序采用单个命令行参数N并打印出相应的罗马数字.
例如,N = 2009应打印MMIX.
假设这应该适用于0 (玩得开心玩圣诞版我的第一轮代码高尔夫,并认为这可能适合新年.用Google搜索,看看它是否已经出现在其他地方,看起来它没有,但让我知道这是否太难或太容易,或者规则需要改变.) 快乐的MMIX! 包括首先调用perl的69 个笔画:
读一行,写一行. 工作范围从0到3999,包括在内.(打印空字符串为0) 在Perl高尔夫比赛中,这通常被评为62杆= 58代码+ 4代表开关. 为什么,是的,那些是不匹配的括号.谢谢你的询问.=)
致谢:原来由于Ton Hospel.涉及括号不匹配的诀窍是
1> A. Rex..:Perl:69招(伯爵!)
$ perl -ple's!.!($#.=5x$&*8%29628)=~y$IVCXL4620-8$XLMCDIXV$d!eg;last}{'
3484
MMMCDLXXXIV
rev.pl
在这个职位(其中顺便说一句,巧妙的).
在C#中,作为扩展方法Int32
:
public static class Int32Extension { public static string ToRomanNumeral(this int number) { Dictionarylookup = new Dictionary () { { 1000000, "M_" }, { 900000, "C_D_" }, { 500000, "D_" }, { 400000, "C_D_" }, { 100000, "C_" }, { 90000, "X_C_" }, { 50000, "L_" }, { 40000, "X_L_" }, { 10000, "X_" }, { 9000, "MX_"}, { 5000, "V_" }, { 4000, "MV_" }, { 1000, "M" }, { 900, "CM" }, { 500, "D" }, { 400, "CD" }, { 100,"C" }, { 90, "XC" }, { 50, "L" }, { 40, "XL" }, { 10, "X" }, { 9, "IX" }, { 5, "V" }, { 4, "IV" }, { 1, "I" } }; StringBuilder answer = new StringBuilder(); foreach (int key in lookup.Keys.OrderBy(k => -1 * k)) { while (number >= key) { number -= key; answer.Append(lookup[key]); } } return answer.ToString(); } }
下划线应该在相应的字母上面拼写为真正的罗马数字.
常见的lisp(SBCL).由"wc -c"计算的63个字符.
(format t "~@R~%" (parse-integer (elt *posix-argv* 1))) (quit)
这仅适用于最高3999的数字.
C#:179个字符(不包括空格/制表符)
static string c(int a) { int[] v = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }; var s = ""; for ( var i = 0; i < 13; i++ ) while (a >= v[i]) { a -= v[i]; s += "M CM D CD C XC L XL X IX V IV I".Split()[i]; } return s; }
Perl,19招.保证适用于1到12之间的值.
sub r{chr 8543+pop}
语言:JavaScript.
没有添加格式的129个字符
以下代码是pl.comp.lang.javascript
几年前在newsgrup 发生的编码测验的结果.我不是代码的作者.
function rome(N,s,b,a,o){ for(s=b='',a=5;N;b++,a^=7)for(o=N%a,N=N/a^0;o--;) s='IVXLCDM'.charAt(o>2?b+N-(N&=~1)+(o=1):b)+s;return s }
Elus的原帖