- 浏览: 103151 次
- 性别:
- 来自: 北京
最新评论
首先得知道罗马数字是怎么回事:
http://520920.blog.51cto.com/126264/114533
得验证 输入的字符串 是不是 规范的罗马数字
http://hi.baidu.com/dryg/blog/item/58fb7df33357b7c80b46e0f3.html
然后就是转换了
http://ralf0131.blogbus.com/logs/38528077.html
唉,对正则表达式忘完了 得复习复习
然后写了 java的 记在这里 以后看看...
import java.util.HashMap; import java.util.Map; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Convert { /**首先是检查输入字符串是否是一个合法的罗马数字, * 使用正则表达式来实现, * * 接下来就是分别获得罗马数字的千位、百位、十位和个位数字, * 并将它转化为阿拉伯数字, * 最后相加即可。 * I=1|V=5|X=10|L=50|C=100|D=500|M=1000 */ private static boolean isValid(String romaNum) { //String matchStr = "^IVLCDM"; String matchStr = "^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$"; boolean isRoma = romaNum.matches(matchStr); return isRoma; } private static int toArabic(String romaNum) { int result=0;//返回的结果 Map<String , Integer> hundredsMap = new HashMap<String,Integer>();//百位map Map<String , Integer> tensMap = new HashMap<String,Integer>();//十位map Map<String , Integer> bitsMap = new HashMap<String,Integer>();//个位map String[] str1 = "C=100,CC=200,CCC=300,CD=400,D=500,DC=600,DCC=700,DCCC=800,CM=900".split(","); for(String split : str1) { String[] pair = split.split("="); hundredsMap.put(pair[0], Integer.parseInt(pair[1])); } String[] str2 = "X=10,XX=20,XXX=30,XL=40,L=50,LX=60,LXX=70,LXXX=80,XC=90".split(","); for(String split : str2) { String[] pair = split.split("="); tensMap.put(pair[0], Integer.parseInt(pair[1])); } String[] str3 = "I=1,II=2,III=3,IV=4,V=5,VI=6,VII=7,VIII=8,IX=9".split(","); for(String split : str3) { String[] pair = split.split("="); bitsMap.put(pair[0], Integer.parseInt(pair[1])); } Pattern thousandsPattern = Pattern.compile("^M{0,3}"); Pattern hundredsPattern = Pattern.compile("CM|CD|D?C{0,3}"); Pattern tensPattern = Pattern.compile("XC|XL|L?X{0,3}"); Pattern bitsPattern = Pattern.compile("IX|IV|V?I{0,3}$"); Matcher match1 = thousandsPattern.matcher(romaNum); match1.find(); if(!match1.group().equals(""))//千位有多少个M 就成相应的1000被 result = match1.group().length()*1000; /* * 下面 百位 十位 个位 分别按照各自的map去匹配 如果有就加上相应的value */ Matcher match2 = hundredsPattern.matcher(romaNum.substring(match1.end())); match2.find(); if(!match2.group().equals("")) result = result + hundredsMap.get(match2.group()); Matcher match3 = tensPattern.matcher(romaNum.substring(match2.end()+match1.end())); match3.find(); if(!match3.group().equals("")) { result = result + tensMap.get(match3.group()); } Matcher match4 = bitsPattern.matcher(romaNum.substring(match2.end()+match1.end()+match3.end())); match4.find(); if(!match4.group().equals("")) result = result + bitsMap.get(match4.group()); return result; } public static void main(String[] args) { while(true) { //MMMDCCCLXXXVIII System.out.println("请输入罗马数字:"); Scanner scan=new Scanner(System.in); String romaNum = scan.nextLine().trim(); if(!isValid(romaNum)) { System.out.println("输入无效,请重新输入"); continue; }else { System.out.print("对应的阿拉伯数字是:"); System.out.println(toArabic(romaNum)); break; } } } }
发表评论
-
hibernate中htm.xml注意的一个问题
2011-06-08 12:00 880遇到了这个问题 总是报 org.hibernate ... -
有关于验证码的
2011-06-01 13:00 634验证码 是怎么出来的呢 应该有很多种方式,今天看到了一段代码中 ... -
转系统架构的一片文章
2011-05-13 14:27 718原文其实应该是.NET上面的 但是我觉得架构上同样适用 ... -
java中从汉字得到拼音的函数【转载】
2011-05-11 10:17 889public class GB2Alpha { ... -
后缀树 后缀数组 字符串的 那些面试题... 【烂,别点进来】
2011-04-24 16:28 1580最近在总结点面试题,好像放在公司里,忘记拷到U盘上了。回去传到 ... -
海量数据的匹配 bloom filter 【别进来 很烂】
2011-04-22 10:30 1016引出 是老张说的腾讯的面试题 说 昨天有一亿个QQ登陆 ... -
Hello mina 【别进来 烂 会后悔】
2011-04-18 17:46 758mina nio 开源代码 以上是关键字 感觉 ... -
java nio & reactor
2011-04-15 14:26 847想看 java io很久了 菜的很 两个文章和一本书 小了解一 ... -
vm到jsp
2011-02-14 14:54 2114http://www.iteye.com/topic/1355 ... -
json&jsonP&跨域
2011-01-10 15:58 776http://www.ibm.com/developerwor ... -
PermGen space
2010-12-14 11:59 714http://blog.csdn.net/Jerry_R ... -
编程珠玑课后题,吝啬的初始化
2010-12-05 16:20 1042在这里,我们有一个稀疏的数组需要访问,并且在第一次访问的时 ... -
BitSet 原理&位操作&基本类型的大小
2010-12-05 11:52 1864因为在看编程珠玑 第一章讲到了 用BitSet来对N多数字进行 ... -
JVM 小总结
2010-11-25 14:22 651http://www.iteye.com/topic/8218 ... -
jdk5.0 6.0新特性
2010-11-25 08:18 565也许会被蛋疼的人问道吧 http://qwzhl100 ... -
对象的复制:ezmorph
2010-11-17 10:59 733ezmoph组件 http://blog.csdn.net/ ... -
how tomcat works
2010-11-16 17:36 976http://jarfield.iteye.com/blog/ ... -
ThreadLocal
2010-11-14 22:05 772起因还是那天培训 对这个了解不深刻 赶紧看看 ... -
ConcurrentHashMap记录
2010-11-14 21:09 836那天的讲座中 武祥提到了 ConcurrentHashMap ... -
有关海量数据
2010-11-06 16:26 803起因是看到了 小灰灰在人人上分享的文章 http://blo ...
相关推荐
它通常会将整数分解成一系列的基本罗马数字,然后按照特定顺序组合起来。例如,3999可以拆分为1000(M)、900(CM)、90(XC)和9(IX)。这个过程涉及到数值除法和模运算,以及对罗马数字规则的理解。 在开发这样...
VB做的,用了Vistactrl控件,很酷的
### Python 实现将罗马数字转换成普通阿拉伯数字的方法 #### 知识点一:罗马数字基础知识 罗马数字是由七种符号组成的一种计数系统:I(1)、V(5)、X(10)、L(50)、C(100)、D(500)以及M(1000)。罗马数字...
在编程领域,尤其是在进行算法设计和面试准备时,...以上就是实现罗马数字与阿拉伯数字互转功能所需的主要知识点。在实际编程过程中,还需要良好的编程习惯,包括注释、代码结构清晰等,以提高代码的可读性和维护性。
阿拉伯数字转换成罗马数字的方法阿拉伯数字转换成罗马数字的方法阿拉伯数字转换成罗马数字的方法
在压缩包文件"lex 写 罗马阿拉伯数字互转"中,很可能包含了LEX源代码文件(通常以`.l`或`.ll`为扩展名)以及编译和运行该程序所需的其他资源。通过研究这些文件,我们可以深入理解LEX如何处理这种特定的文本解析任务...
本压缩包“BAT批处理脚本-格式转换-阿拉伯数字转为罗马数字.cmd.zip”包含了将阿拉伯数字转换为罗马数字的批处理脚本。批处理文件通常以".cmd"或".bat"为扩展名,但为了安全考虑,这里提供的脚本以".txt"格式存储,...
对于逆向转换(阿拉伯数字转罗马数字),可能需要特别处理如如何构造最简形式的罗马数字等问题。 6. **应用场景**:这类转换在编程竞赛、编码解码、历史数据分析(如公元纪年)、游戏开发(如谜题设计)等领域都有...
如题,用java做的小程序,罗马数字与阿拉伯数字互转,从1-8999都可以I->1,V->5,X->10,L->50,C->100,D->500,M->1000,v->5000 需要代码的话联系我diablo09070265@sina.com. 主要用来换积分的,想下几本书,所以做个小...
026 阿拉伯数字转换为罗马数字 C语言
本文将详细介绍一个名为“CnumToHan”的类,它专门用于将罗马数字或阿拉伯数字转换为大写汉字。 首先,让我们理解罗马数字的基本概念。罗马数字是一种古老的数字表示方式,由七个不同的符号(I, V, X, L, C, D, M)...
python 实现 罗马数字转阿拉伯
采用语法制导翻译模式框架将阿拉伯转罗马数字,做《编译原理》(龙书)后第2章习题,不知道对不??MSVC6编译
在编程语言Python中实现阿拉伯数字与罗马数字之间的互相转换是一个涉及基础算法和数据结构操作的实用功能。阿拉伯数字即我们通常使用的0-9的计数系统,而罗马数字则是源于古罗马的一种非位值制的记数系统,它由七个...
例如,脚本可能会先检查输入是否为有效的阿拉伯数字,然后逐位处理,将每一位转换成罗马数字。在转换过程中,可能会用到SET命令来设置变量,以及ECHO命令来显示结果。 总的来说,这个压缩包提供的批处理脚本可以...
首先,我们来看`dec2roman`函数,它的作用是将一个阿拉伯数字转换成罗马数字。这个函数首先检查输入的参数`$f`是否为有效的数字,即它是否在0到3999的范围内。因为罗马数字传统上只表示1到3999的数值。接着,定义了...
"Java实现的求解经典罗马数字和阿拉伯数字相互转换问题示例" 本文主要介绍了Java实现的求解经典罗马数字和阿拉伯数字相互转换问题,涉及Java输入输出及字符串、数组的遍历与转换相关操作技巧。 首先,让我们了解...
1. **罗马数字到阿拉伯数字**:首先,我们需要编写一个函数,将输入的罗马数字字符串转换为其对应的阿拉伯数字。这可以通过创建一个映射表,存储每个罗马数字对应阿拉伯数字的值,然后遍历字符串并应用加减法则来...
本文实例讲述了Python将阿拉伯数字转换为罗马数字的方法。分享给大家供大家参考。具体实现方法如下: def numToRomanNum(Num): digital will be converted into Roman numerals,Ex: numToRomanNum(3999) if Num ...