首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Code Golf新年版-从整数到罗马数字

Code Golf新年版-从整数到罗马数字
EN

Stack Overflow用户
提问于 2008-12-27 02:21:03
回答 22查看 3.9K关注 0票数 17

编写一个带有单个命令行参数N的程序,并打印出相应的Roman Numeral

例如N= 2009应打印MMIX。

假设这应该适用于0

(用Christmas edition打我的第一轮代码高尔夫很有趣,我想这可以用来迎接新年。我谷歌了一下,看看以前是否在其他地方出现过这个问题,看起来没有,但请让我知道这是太难还是太容易,或者规则是否需要改变。)

MMIX快乐!

EN

回答 22

Stack Overflow用户

发布于 2008-12-27 02:49:21

在C#中,作为Int32的扩展方法

代码语言:javascript
复制
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();
    }
}

下划线应在相应字母上方加下划线,以使其为真正的罗马数字。

票数 14
EN

Stack Overflow用户

发布于 2008-12-27 02:55:21

通用lisp (SBCL)。通过"wc -c“统计63个字符。

代码语言:javascript
复制
(format t "~@R~%" (parse-integer (elt *posix-argv* 1)))
(quit)

这只适用于3999以下的数字。

票数 11
EN

Stack Overflow用户

发布于 2008-12-27 03:49:50

C#:179个字符(不包括空格/制表符)

代码语言:javascript
复制
    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;
    }
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/394574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档