【LeetCode】C# 12、Integer to Roman

Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
把给定的整数转化为罗马数字。

罗马数字的符号一共只有7个:I(代表1)、V(代表5)、X(代表10)、L(代表50)、C代表100)、D(代表500)、M(代表1,000).这7个符号位置上不论怎样变化,它所代表的数字都是不变的.它们按照下列规律组合起来,就能表示任何数。
下面是别人的算法,事先建立一个储存个十百千位的表后,按罗马数字排列规律写出某一位的循环即可。
原博:http://www.cnblogs.com/etcow/archive/2012/09/13/2684057.html

public class Solution {
    public string IntToRoman(int num) {
        string res = "";
        int[] arr = new int[4];
        for(int i = 0;i<4;i++){
            arr[i] = num % (int)Math.Pow(10, i + 1) / (int)Math.Pow(10, i);
        }
        for(int i = 3;i >= 0;i--){
            if (arr[i] != 0)
                {
                    if (i == 3)
                        res += D1000[arr[i] - 1];
                    if (i == 2)
                        res += D100[arr[i] - 1];
                    if (i == 1)
                        res += D10[arr[i] - 1];
                    if (i == 0)
                        res += D1[arr[i] - 1];
                }
        }
        return res;
    }
    static string[] D1 = {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
    static string[] D10 = { "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" };
    static string[] D100 = { "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" };
    static string[] D1000 = { "M", "MM", "MMM" };
}

或者把罗马数字中的表达形式罗列出来,然后将num从大到小分别与其对应,很简洁。
http://blog.csdn.net/beiyeqingteng/article/details/8547565

    int[] val = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
    String[] strs = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};

    StringBuilder sb = new StringBuilder();

    for(int i=0;i<val.Length;i++) {
        while(num >= val[i]) {
            num -= val[i];
            sb.Append(strs[i]);
        }
    }
    return sb.ToString();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值