来源于 LeetCode

Roman to Integer

描述: Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
(给定一个罗马数字,将其转换为整数。输入保证在1到3999的范围内。)

Integer to Roman

描述:Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.(给定一个整数,将其转换为罗马数字。
输入保证在1到3999的范围内。)

罗马数字介绍

罗马数字是欧洲在阿拉伯数字(实际上是印度数字)传入之前使用的一种数码,现在应用较少。它的产生晚于中国甲骨文中的数码,更晚于埃及人的十进位数字。但是,它的产生标志着一种古代文明的进步。

记数方法

基本数字 对应的阿拉伯数字为
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
  1. 相同的数字连写、所表示的数等于这些数字相加得到的数、如:Ⅲ=3;
  2. 小的数字在大的数字的右边、所表示的数等于这些数字相加得到的数、 如:Ⅷ=8、Ⅻ=12;
  3. 小的数字(限于 I、X 和 C)在大的数字的左边、所表示的数等于大数减小数得到的数、如:Ⅳ=4、Ⅸ=9;
  4. 正常使用时、连写的数字重复不得超过三次;
  5. 在一个数的上面画一条横线、表示这个数扩大 1000 倍。

组数规则

有两条须注意掌握:

  1. 基本数字 Ⅰ、X 、C 中的任何一个、自身连用构成数目、或者放在大数的右边连用构成数目、都不能超过三个;放在大数的左边只能用一个;
  2. 不能把基本数字 V 、L 、D 中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目、只能使用一个;

对照举例

  • 个位数举例

    Ⅰ-1、Ⅱ-2、Ⅲ-3、Ⅳ-4、Ⅴ-5、Ⅵ-6、Ⅶ-7、Ⅷ-8、Ⅸ-9

  • 十位数举例

    Ⅹ-10、Ⅺ-11、Ⅻ-12、XIII-13、XIV-14、XV-15、XVI-16、XVII-17、XVIII-18、XIX-19、XX-20、XXI-21、XXII-22、XXIX-29、XXX-30、XXXIV-34、XXXV-35、XXXIX-39、XL-40、L-50、LI-51、LV-55、LX-60、LXV-65、LXXX-80、XC-90、XCIII-93、XCV-95、XCVIII-98、XCIX-99

  • 百位数举例

    C-100、CC-200、CCC-300、CD-400、D-500、DC-600、DCC-700、DCCC-800、CM-900、CMXCIX-999

  • 千位数举例

    M-1000、MC-1100、MCD-1400、MD-1500、MDC-1600、MDCLXVI-1666、MDCCCLXXXVIII-1888、MDCCCXCIX-1899、MCM-1900、MCMLXXVI-1976、MCMLXXXIV-1984、MCMXC-1990、MM-2000、MMMCMXCIX-3999

算法分析

  • 罗马数字转阿拉伯数字

    class Solution {public int roman2Integer(String roman) {if (roman.length() < 1) {return 0;}// 定义一个map将映射关系存储起来Map<Character, Integer> map = new HashMap<>();map.put('I', 1);map.put('V', 5);map.put('X', 10);map.put('L', 50);map.put('C', 100);map.put('D', 500);map.put('M', 1000);int result = 0;char[] chars = roman.toCharArray();for (int i = 0; i < chars.length; i++) {if (i < chars.length - 1) {// 两两比较根据规则左小右大则为减,左大右小则为加if (map.get(chars[i]) < map.get(chars[i + 1])) {result -= map.get(chars[i]);} else {result += map.get(chars[i]);}} else {// 最后一位必为加result += map.get(chars[i]);}}return result;}
    }
    

    这个是自己琢磨的,感觉不够好,有好的算法还希望大家多多交流~~

  • 下面贴个LeetCode上的

    public int romanToInt(String s) {int sum=0;if(s.indexOf("IV")!=-1){sum-=2;}if(s.indexOf("IX")!=-1){sum-=2;}if(s.indexOf("XL")!=-1){sum-=20;}if(s.indexOf("XC")!=-1){sum-=20;}if(s.indexOf("CD")!=-1){sum-=200;}if(s.indexOf("CM")!=-1){sum-=200;}char c[]=s.toCharArray();int count=0;for(;count<=s.length()-1;count++){if(c[count]=='M') sum+=1000;if(c[count]=='D') sum+=500;if(c[count]=='C') sum+=100;if(c[count]=='L') sum+=50;if(c[count]=='X') sum+=10;if(c[count]=='V') sum+=5;if(c[count]=='I') sum+=1;}return sum;
    }
    
  • 阿拉伯数字转罗马数字(参见罗马数字C++实现)

    class Solution {public String int2Roman(int num) {// 个、十、百、千位映射到罗马数字的映射表String[][] mapping = {{"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"},{"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"},{"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"},{"", "M", "MM", "MMM"}};return mapping[3][num / 1000 % 10]  // 千位+ mapping[2][num / 100 % 10]// 百位+ mapping[1][num / 10 % 10] // 十位+ mapping[0][num % 10];     // 个位}
    }
    

罗马数字与阿拉伯数字互转相关推荐

  1. 罗马数字和阿拉伯数字互转(源码)

    罗马数字和阿拉伯数字互转(源码) 将下面源码全部复制下来直接粘贴到html页面试一下,代码还有许多需要改进的地方,请各位大神多多指点,谢谢! <!DOCTYPE html> <htm ...

  2. 罗马数字 与 阿拉伯数字 互转工具类

    罗马数字 与 阿拉伯数字 互转工具类 在其它工具类上没找到,自己写了个工具类,以此记录: /*** 罗马数字工具类** @author pipizhen* @since 2023-02-03 11:4 ...

  3. 罗马数字和阿拉伯数字互化 java实现

    首先我们来看一下罗马数字的表数方法: 1.罗马数字采用七个罗马字母作数字.即Ⅰ(1).X(10).C(100).M(1000).V(5).L(50).D(500) 2.相同的数字连写,所表示的数等于这 ...

  4. Python罗马数字和阿拉伯数字互转

    class RomanAlaboOp(object):@classmethoddef alabo2roman(cls, alabo):'''''阿拉伯转罗马'''alabo = int(alabo)n ...

  5. 罗马数字与阿拉伯数字的相互转换

      最近遇到一道非常有趣的题目,题目大意如下:有一个富翁在银河系里做生意,而银河系使用的是罗马数字,所以他需要一个精明能干的助手,帮助他完成罗马数字与阿拉伯数字的相互转换,题目在这个背景下衍生出交易场 ...

  6. python罗马数字转换阿拉伯数字_20202427-张启辰《Python3初学:罗马数字转阿拉伯数字》...

    20202427-张启辰<Python3初学:罗马数字转阿拉伯数字> 1.规则 罗马数字是古罗马使用的一种记数系统,在阿拉伯数字传入之前使用较为普遍,目前大家可能在钟表.日历.文章的排序 ...

  7. java输出罗马数字_Java实现的求解经典罗马数字和阿拉伯数字相互转换问题示例...

    本文实例讲述了Java实现的求解经典罗马数字和阿拉伯数字相互转换问题.分享给大家供大家参考,具体如下: 古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来 ...

  8. 罗马数字转阿拉伯数字两种实现

    记数方法 古罗马数字基本符号 基本字符 I V X L C D M 相应的阿拉伯数字表示为 1 5 10 50 100 500 1000 相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ=3 ...

  9. python判断输入的是否为数字_python怎么判断是否为数字 将罗马数字转为阿拉伯数字,用python解...

    将阿拉伯数字转为罗马数字,用python解 class Solution(object): def intToRoman(self, num): """ :type nu ...

最新文章

  1. wireshark 抓包iphone 4g_比4G下续航短2小时,苹果回应iPhone12用5G耗电快:与运营商一道做更多优化工作...
  2. [Cake] 0.C#Make自动化构建-简介
  3. ini配置文件的读写
  4. VC++2005项目的目录结构设置
  5. Jenkins 流水线 获取git 分支列表_基于Jenkins的DevOps流水线实践教程
  6. matlab 预测值一样,matlab BP神经网络建造如下,预测时,预测值反归一化报错,求大神指教!!!!!...
  7. CUMCM 2021-B:乙醇偶合制备C4烯烃(多元线性回归分析)
  8. ReportMachine 打印机横向
  9. 数据结构--最小生成树详解
  10. 2013中国互联网公司、全球互联网公司最新市值排名(2013.04.20)
  11. J2EE学习推荐书籍
  12. 原生js实现贪食蛇小游戏
  13. flex 实现水平布局 三等分
  14. 计算机汉字编码不能使用内码,汉字编码及区位码查询算法
  15. python输出为什么会有b_【已解决】为什么Python打印数据显示为b‘XXX’格式
  16. 坦克大战类型 坦克WASD前后左右移动的解决方法
  17. 用计算机做出牙膏盒立体效果制作,使用Nuke进行2D转3D立体世界详解案例教程(二):制作3D立体效果...
  18. 汽车维修管理系统(RPMS)项目
  19. 唐骏在大连理工的幽默演讲
  20. 内网上不了QQ,有办法解决:)

热门文章

  1. matlab卡方分布函数,MATLAB如何使用ncx2pdf函数计算非中心卡方分布的概率密度
  2. 毕业设计 基于stm32的血压测量检测系统 - 物联网 单片机
  3. 链接和二维码被微信拦截(被封锁、被屏蔽、被和谐)的最新解决方法——MaxJump
  4. win10 windows update禁用后又自动开启
  5. SAP的SLED的2个验证
  6. 使用docker搭建sqli-lab环境以及upload-labs环境 xss挑战之旅环境 搭建vulhub环境
  7. 蓝牙BLE芯片PHY6222之I2C主从通信
  8. 从 Discord 看未来社交的「超级群」模式
  9. 衡水中学计算机老师,衡水中学的老师到底有多拼,看看这“八项规定”就知道了!...
  10. mysql逻辑运算符的优先顺序_布尔逻辑算符的类型和在检索式中优先执行的顺序...