编写一个带有单个命令行参数N的程序,并打印出相应的Roman Numeral。
例如N= 2009应打印MMIX。
假设这应该适用于0
(用Christmas edition打我的第一轮代码高尔夫很有趣,我想这可以用来迎接新年。我谷歌了一下,看看以前是否在其他地方出现过这个问题,看起来没有,但请让我知道这是太难还是太容易,或者规则是否需要改变。)
MMIX快乐!
发布于 2008-12-27 02:49:21
在C#中,作为Int32
的扩展方法
public static class Int32Extension {
public static string ToRomanNumeral(this int number) {
Dictionary<int, string> lookup = new Dictionary<int, string>() {
{ 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();
}
}
下划线应在相应字母上方加下划线,以使其为真正的罗马数字。
发布于 2008-12-27 02:55:21
通用lisp (SBCL)。通过"wc -c“统计63个字符。
(format t "~@R~%" (parse-integer (elt *posix-argv* 1)))
(quit)
这只适用于3999以下的数字。
发布于 2008-12-27 03:49:50
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;
}
https://stackoverflow.com/questions/394574
复制相似问题