- 浏览: 98827 次
- 性别:
- 来自: 北京
最新评论
首先得知道罗马数字是怎么回事:
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 836遇到了这个问题 总是报 org.hibernate ... -
有关于验证码的
2011-06-01 13:00 595验证码 是怎么出来的呢 应该有很多种方式,今天看到了一段代码中 ... -
转系统架构的一片文章
2011-05-13 14:27 685原文其实应该是.NET上面的 但是我觉得架构上同样适用 ... -
java中从汉字得到拼音的函数【转载】
2011-05-11 10:17 850public class GB2Alpha { ... -
后缀树 后缀数组 字符串的 那些面试题... 【烂,别点进来】
2011-04-24 16:28 1535最近在总结点面试题,好像放在公司里,忘记拷到U盘上了。回去传到 ... -
海量数据的匹配 bloom filter 【别进来 很烂】
2011-04-22 10:30 981引出 是老张说的腾讯的面试题 说 昨天有一亿个QQ登陆 ... -
Hello mina 【别进来 烂 会后悔】
2011-04-18 17:46 726mina nio 开源代码 以上是关键字 感觉 ... -
java nio & reactor
2011-04-15 14:26 810想看 java io很久了 菜的很 两个文章和一本书 小了解一 ... -
vm到jsp
2011-02-14 14:54 2072http://www.iteye.com/topic/1355 ... -
json&jsonP&跨域
2011-01-10 15:58 746http://www.ibm.com/developerwor ... -
PermGen space
2010-12-14 11:59 674http://blog.csdn.net/Jerry_R ... -
编程珠玑课后题,吝啬的初始化
2010-12-05 16:20 995在这里,我们有一个稀疏的数组需要访问,并且在第一次访问的时 ... -
BitSet 原理&位操作&基本类型的大小
2010-12-05 11:52 1821因为在看编程珠玑 第一章讲到了 用BitSet来对N多数字进行 ... -
JVM 小总结
2010-11-25 14:22 616http://www.iteye.com/topic/8218 ... -
jdk5.0 6.0新特性
2010-11-25 08:18 533也许会被蛋疼的人问道吧 http://qwzhl100 ... -
对象的复制:ezmorph
2010-11-17 10:59 696ezmoph组件 http://blog.csdn.net/ ... -
how tomcat works
2010-11-16 17:36 939http://jarfield.iteye.com/blog/ ... -
ThreadLocal
2010-11-14 22:05 721起因还是那天培训 对这个了解不深刻 赶紧看看 ... -
ConcurrentHashMap记录
2010-11-14 21:09 773那天的讲座中 武祥提到了 ConcurrentHashMap ... -
有关海量数据
2010-11-06 16:26 776起因是看到了 小灰灰在人人上分享的文章 http://blo ...
相关推荐
阿拉伯数字转换成罗马数字的方法阿拉伯数字转换成罗马数字的方法阿拉伯数字转换成罗马数字的方法
matlab开发-罗马数字阿拉伯数字转换。这些图形用户界面将罗马数字转换为整数,反之亦然。
VB做的,用了Vistactrl控件,很酷的
主要介绍了Python实现将罗马数字转换成普通阿拉伯数字的方法,简单分析了罗马数字的构成并结合实例形式给出了Python转换罗马数字为阿拉伯数字的实现方法,需要的朋友可以参考下
使用VC++控制台,实现4000以内的罗马与阿拉伯数字互转换的功能。
如题,用java做的小程序,罗马数字与阿拉伯数字互转,从1-8999都可以I->1,V->5,X->10,L->50,C->100,D->500,M->1000,v->5000 需要代码的话联系我diablo09070265@sina.com. 主要用来换积分的,想下几本书,所以做个小...
026 阿拉伯数字转换为罗马数字 C语言
在LINUX中编写 罗马数字与阿拉伯数字互转的程式 LEX编译
实现了1-9999罗马数字与阿拉伯数字的相互转换。
python 实现 罗马数字转阿拉伯
采用语法制导翻译模式框架将阿拉伯转罗马数字,做《编译原理》(龙书)后第2章习题,不知道对不??MSVC6编译
本文实例讲述了Python将阿拉伯数字转换为罗马数字的方法。分享给大家供大家参考。具体实现方法如下: def numToRomanNum(Num): digital will be converted into Roman numerals,Ex: numToRomanNum(3999) if Num ...
罗马数字 一个简单的程序包,可将罗马转换为阿拉伯数字(反之亦然)。 它还可以检查有效的罗马格式。 安装 $ npm install --save roman-numbers 如何使用它 您可以要求的所有拳头如下: const {romanToArab, ...
为避免误触发,有些改为了txt格式,使用时请自行查看业务然后改为bat格式即可。
主要介绍了Java实现的求解经典罗马数字和阿拉伯数字相互转换问题,涉及java输入输出及字符串、数组的遍历与转换相关操作技巧,需要的朋友可以参考下
这些 GUI 将罗马数字转换为整数数字,反之亦然。
脱罗马剂以功能编程风格将罗马数字转换为阿拉伯数字。
将罗马数字转换为阿拉伯数字,反之亦然的函数。 基本信息 该项目的目的只是个人学习。 描述 convertToArabics()接受数字参数num ,该参数应为有效的罗马数字,并使用for循环和切换大小写将其转换为罗马数字。 ...