输入'i'返回1   
  输入'vi'返回6之类的  

解决方案 »

  1.   

    肯定是需要写个算法函数的哦..
    little_wind_585 你的自定义函数发出来共享一下啊
      

  2.   


     public int ConvertData(string roman)
            {            roman = roman.ToUpper();
                roman.Replace("_V", "S");
                roman.Replace("_X", "R");
                roman.Replace("_L", "Q");
                roman.Replace("_C", "P");
                roman.Replace("_D", "O");
                roman.Replace("_M", "N");            int arabic = 0, sidx = 0;
                int len = roman.Length - 1;
                char[] data = roman.ToCharArray();            while (len >= 0)
                {
                    int i = 0;
                    sidx = len;                arabic += Convert2(data[sidx]);
                    i++;
                    len--;
                }            return arabic;
            }        private int Convert2(char c)
            {
                switch (c)
                {
                    case 'I':
                        return 1;
                    case 'V':
                        return 5;
                    case 'X':
                        return 10;
                    case 'L':
                        return 50;
                    case 'C':
                        return 100;
                    case 'D':
                        return 500;
                    case 'M':
                        return 1000;
                    case 'S':
                        return 5000;
                    case 'R':
                        return 10000;
                    case 'Q':
                        return 50000;
                    case 'P':
                        return 100000;
                    case 'O':
                        return 500000;
                    case 'N':
                        return 1000000;
                    default:
                        return 0;            }
            }应该对的吧 根据PHP代码转的
      

  3.   

    四楼的代码对于输入了正确的罗马数字可以正确转换成阿拉伯数字。但是代码中没有校验输入的罗马数字的正确性
    比如 输入LVI 得到 56
    但是如果输入 IIILIII  得到的也是56.
    显然第二种输入是错误的。
    需要完善一下代码就完美了。
      

  4.   

    以下是在网上查到的关于罗马数字规则,结合4楼的朋友的代码,应该可以写出符合规范的转换函数。
    在罗马数字中,有七个字符,它们以各种各样的方法进行重复和组合,用来表示数字。 I = 1 
    V = 5 
    X = 10 
    L = 50 
    C = 100 
    D = 500 
    M = 1000 
    构造罗马数字有一些通用的规则: 字符是一个加在一个后面。I 是 1,II 是 2,III 是 3。VI 是 6 (按字面意思,“5 和 1”),VII 是 7,VIII 是 8。 
    10 的倍数字符(I,X,C,和M)最多可以重复 3 次。到了第 4 次,你必须从接着的最大的 5 的倍数字符作减法。你不能用 IIII 表示 4;而应该用 IV 来表示(5 少 1)。40 被写作 XL(50 少 10),41 为 XLI,42 为 XLII,43 为 XLIII,44 为 XLIV(“ 50 少 10,然后 5 少 1)。 
    同样,对于 9,你必须从接着的最大的 10 的倍数字符作减法:8 是 VIII,但 9 是 IX (“10 少 1”),不是 VIIII (因为 I 字符不能被重复 4 次)。90 是 XC,900 是 CM。 
    5 的倍数字符不能被重复,10 总是表示为 X,决不会为 VV。100 总是 C,决不会为 LL。 
    罗马数字总是从最高到最低,从左向右读,所以字符的顺序非常重要。DC 是 600;CD 是一个完全不同的数字(400,“500 少 100”)。 CI 是 101;IC 甚至不是一个有效的罗马数字(因为你不能从 100 直接减 1;应该写成 XCIX,“100 少 10 ,接着10 少 1”)。
    照此:
    用罗马数字能够表达有限范围的数字,明确为 1 到 3999。
      

  5.   

        public static string GetLoumaNumber(int n)
            {
                int[] arabic = new int[13];
                string[] roman = new string[13];
                int i = 0;
                string o = "";            arabic[0] = 1000;
                arabic[1] = 900;
                arabic[2] = 500;
                arabic[3] = 400;
                arabic[4] = 100;
                arabic[5] = 90;
                arabic[6] = 50;
                arabic[7] = 40;
                arabic[8] = 10;
                arabic[9] = 9;
                arabic[10] = 5;
                arabic[11] = 4;
                arabic[12] = 1;            roman[0] = "M";
                roman[1] = "CM";
                roman[2] = "D";
                roman[3] = "CD";
                roman[4] = "C";
                roman[5] = "XC";
                roman[6] = "L";
                roman[7] = "XL";
                roman[8] = "X";
                roman[9] = "IX";
                roman[10] = "V";
                roman[11] = "IV";
                roman[12] = "I";            while (n > 0)
                {
                    while (n >= arabic[i])
                    {
                        n = n - arabic[i];
                        o = o + roman[i];
                    }
                    i++;
                }
                return o;
            }