首页 > 作文

C#算法之罗马数字转整数

更新时间:2023-04-04 16:18:19 阅读: 评论:0

罗马数字转整数

罗马数字包含以下七种字符:ivxlcdm

字符          数值i             1v             5x             10l             50c             100d             500m             1000

例如, 罗马数字 2 写做ii,即为两个并列的 1。12 写做xii,即为x+ii。 27 写做xxvii, 即为xx+v+ii

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做iiii,而是iv。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为ix。这个特殊的规则只适用于以下六种情况:

i可以放在v(5) 和x(10) 的左边,来表示 4 和 9。x可以放在l(50) 2017年跨年演唱会和c(100) 的左边,来表示 40 和90。c可以放在d(500) 和m(1000) 的左边,来表示400 和900。

给定一个罗马数字,将其转换成整数。输入确保在 1到 3999 的范围内。

示例1:

输入:"iii"输出: 3

示例2:

输入:"iv"输出: 4

示例3:

输入:"ix"输出: 9

示例4:

输入:"lviii"输出: 58解释: l = 50, v= 5, iii = 3.

示例5:

输入:"mcmxciv"输出: 1994解释: m = 1000, cm = 900, xc = 90, iv = 4.

笔者的方法:

时间200ms左右,

思路是

把所有的情况放到哈希表中每次取一个位把 i 和 i+1 放一起,试试有没有区配的,有的话把 i 和 i+1 放一起没有的话,就是 只是计 i
public class solution    {        public int romantoint(string s)        {            char[] c = s.tochararray();         //将其转为字符数组            int sum = 0;                        //值            hashtable hashtable = new hashtable();            //7个基本单位            hashtable.add("i", 1);            hashtable.add("v", 5);            hashtable.add("x", 10);            hashtable.add("l", 50);            hashtable.add("c", 100);            hashtable.add("d", 500);            hashtable.add("m", 1000);            //加上6种情况            hashtable.add("iv", 4);            hashtable.add("ix", 9);            hashtable.add("xl", 40);            hashtable.add("xc", 90);            hashtable.add("cd", 400);            hashtable.add("cm", 900);

/*
* 六种情况
iv 4 ix 9
xl 40品管圈活动 xc 90
cd 400 cm 9000
*/

for (int i = 0; i < c.length; i++)            {                if (i + 1 < c.length && hashtable.containskey(c[i].tostring() + c[i + 1].tostring()))     //如果发现两位一起能区配的话                {                    sum += int.par(hashtable[c[i].tostring() + c[i + 1].tostring()].tostring());   银行警示教育心得     //获取值,hashtable的类型都是object!                    i++;                                                                                    //跳两位                }                el                {                    sum += int.par(hashtable[c[i].tostring()].tostring());                }            }            return sum;        }    }

换成字典

public class solution    {        public int romantoint(string s)        {            char[] c = s.tochararray();         //将其转为字符数组            int sum = 0;                        //值            dictionary<string, int> dictionary = new dictionary<string, int>();            //7个基本单位            dictionary.add("i", 1);            dictionary.add("v", 5);            dictionary.add("x", 10);            dictionary.add("l", 50);            dictionary.add("c", 100);            dictionary.add("d", 500);            dictionary.add("m", 1000);            //加上6种情况            dictionary.add("iv", 4);            dictionary.add("ix", 9);            dictionary.add("xl", 40);            dictionary.add("xc", 90);            dictionary.add("cd", 400);            dictionary.add("cm", 900);

/*
* 六种情况
iv 4 ix 9
xl 40 xc 90
cd 400 cm 9000
*/

for (int i = 0; i < c.length; i++)            {                if (i + 1 < c.length && dictionary.containskey(c[i].tostring() + c[i + 1]))     //如果发现两位一起能区配的话                {                    sum += dictionary[c[i].tostring() + c[i + 1].tostring()];        //获取值,hashtable的类型都是object!                    i++;                                                                                    //跳两位                }                el                {                    sum += dictionary[c[i].tostring()];                }            }            return sum;        }    }

以上两个例子都会进行较多的装箱拆箱,下面主要使用if-el,switch,空间花销较大,但是如果测试例子较多,进行大量计算,时间会相对少一点。

public class solution    {        public int romantoint(string s)        {            int sum = 0;                        //值            for (int i = 0; i < s.length; i++)            {                if (i + 1 < s.length)       //如果后面还有别的字符                {                    if (s[i] == 'i')                    {                        int a = 0;                        switch (s[i + 1])     //"i%"                        {                            ca 'v': a = 4; i++; break;                            ca 'x': a = 9; i++; break;                            default: a = 1; break;                        }                        sum += a;                    }                    el if (s[i] == 'x')                    {                        int a = 0;                        switch (s[i + 1])     //"x%"                        {                            ca 'l': a = 40; i++; break;     来个脑筋急转弯                       ca 'c': a = 90; i++; break;                            default: a = 10; break;                        }                        sum += a;                    }                    el if (s[i] == 'c')                    {                        int a = 0;                        switch (s[i + 1])     //"x%"                        {                            ca 'd': a = 400; i++; break;                            ca 'm': a = 900; i++; break;                            default: a = 100; break;                        }                        sum += a;                    }                    el                    {                        int a = 0;                        switch (s[i])                        {ca 'v': a = 5; break;ca 'l': a = 50; break;ca 'd': a = 500; break;                            ca 'm': a = 1000; break;                        }                        sum += a;                    }                }                el                {                    int a = 0;                    switch (s[i])                    {                        ca 'i': a = 1; break;                        ca 'v': a = 5; break;                        cas产后瑜伽e 'x': a = 10; break;                        ca 'l': a = 50; break;                        ca 'c': a = 100; break;                        ca 'd': a = 500; break;                        ca 'm': a = 1000; break;                    }                    sum += a;                }            }            return sum;        }    }

到此这篇关于c#算法之罗马数字转整数的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持www.887551.com。

本文发布于:2023-04-04 16:18:17,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/616c137ffaee01dd5c0e6ec4e35979d8.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:C#算法之罗马数字转整数.doc

本文 PDF 下载地址:C#算法之罗马数字转整数.pdf

标签:罗马数字   示例   两位   情况
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图