码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 12 Integer to Roman(整型数到罗马数)

时间:2015-10-15 16:13:19      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:leetcode   it   roman   integer   c   

翻译

给定一个整型数值,将其转换到罗马数字。

输入被保证在1到3999之间。

原文

Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

我不会告诉你一开始我是用的无数个变量和if……

后来实在受不了这么多变量就将其写成了枚举,那么接下来就迎刃而解了。

为了让大家理解罗马数是怎么计数的,这里我截了一张图,具体的大家可以自行用微软Bing搜索。

技术分享

那么代码我就先贴出来了:

public class Solution
{
    public string IntToRoman(int num)
    {
        string result = "";
        Type R = typeof(Roman);

        foreach (var r in Enum.GetNames(R).Reverse())
        {
            while (num >= int.Parse(Enum.Format(R, Enum.Parse(R, r), "d")))
            {
                result += r.ToString();
                num -= int.Parse(Enum.Format(R, Enum.Parse(R, r), "d"));
            }
        }
        return result;
    }
}
public enum Roman
{
    M = 1000,
    CM = 900,
    D = 500,
    CD = 400,
    C = 100,
    XC = 90,
    L = 50,
    XL = 40,
    X = 10,
    IX = 9,
    V = 5,
    IV = 4,
    I = 1
};

今天晚些时候我会将 C# 枚举的一些用法贴到博客上,不了解的同学敬请关注。

除了枚举的用法外,我认为这道题中需要你去认真了解这些罗马数的规则,也就是说记得将9和4这种数也添加到枚举中哦。

那么在IntToRoman中都中都在做些什么呢?

  • 搭配Typetypeof新建出来R

  • foreach遍历枚举中的所有元素

  • 切记要加上Reverse(),至于为什么,大家试试不加就知道了

  • 如果num比枚举中的数字大,则将其对应的字符串(比如说”M”)添加到result

  • 最后在num中减掉刚才已经用过的数字,数字也通过枚举来获取

  • 最后返回result

好了,到此为止,准备迎接下一题。

版权声明:本文为 NoMasp柯于旺 原创文章,未经许可严禁转载!欢迎访问我的博客:http://blog.csdn.net/nomasp

LeetCode 12 Integer to Roman(整型数到罗马数)

标签:leetcode   it   roman   integer   c   

原文地址:http://blog.csdn.net/nomasp/article/details/49152451

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!