`
cheer_nice
  • 浏览: 103151 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

罗马数字转成阿拉伯数字

    博客分类:
  • j2se
阅读更多

首先得知道罗马数字是怎么回事:

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;
		    }
		}
	}
}
 

 

分享到:
评论

相关推荐

    matlab开发-罗马数字阿拉伯数字转换

    它通常会将整数分解成一系列的基本罗马数字,然后按照特定顺序组合起来。例如,3999可以拆分为1000(M)、900(CM)、90(XC)和9(IX)。这个过程涉及到数值除法和模运算,以及对罗马数字规则的理解。 在开发这样...

    阿拉伯数字【到】罗马数字

    VB做的,用了Vistactrl控件,很酷的

    Python实现将罗马数字转换成普通阿拉伯数字的方法

    ### Python 实现将罗马数字转换成普通阿拉伯数字的方法 #### 知识点一:罗马数字基础知识 罗马数字是由七种符号组成的一种计数系统:I(1)、V(5)、X(10)、L(50)、C(100)、D(500)以及M(1000)。罗马数字...

    实现罗马与阿拉伯数字互转(上机笔试题)

    在编程领域,尤其是在进行算法设计和面试准备时,...以上就是实现罗马数字与阿拉伯数字互转功能所需的主要知识点。在实际编程过程中,还需要良好的编程习惯,包括注释、代码结构清晰等,以提高代码的可读性和维护性。

    阿拉伯数字转换成罗马数字的方法

    阿拉伯数字转换成罗马数字的方法阿拉伯数字转换成罗马数字的方法阿拉伯数字转换成罗马数字的方法

    linux 中编写 罗马数字与阿拉伯数字互转

    在压缩包文件"lex 写 罗马阿拉伯数字互转"中,很可能包含了LEX源代码文件(通常以`.l`或`.ll`为扩展名)以及编译和运行该程序所需的其他资源。通过研究这些文件,我们可以深入理解LEX如何处理这种特定的文本解析任务...

    BAT批处理脚本-格式转换-阿拉伯数字转为罗马数字.cmd.zip

    本压缩包“BAT批处理脚本-格式转换-阿拉伯数字转为罗马数字.cmd.zip”包含了将阿拉伯数字转换为罗马数字的批处理脚本。批处理文件通常以".cmd"或".bat"为扩展名,但为了安全考虑,这里提供的脚本以".txt"格式存储,...

    罗马数字与阿拉伯数字转换器

    对于逆向转换(阿拉伯数字转罗马数字),可能需要特别处理如如何构造最简形式的罗马数字等问题。 6. **应用场景**:这类转换在编程竞赛、编码解码、历史数据分析(如公元纪年)、游戏开发(如谜题设计)等领域都有...

    罗马数字与阿拉伯数字互转

    如题,用java做的小程序,罗马数字与阿拉伯数字互转,从1-8999都可以I-&gt;1,V-&gt;5,X-&gt;10,L-&gt;50,C-&gt;100,D-&gt;500,M-&gt;1000,v-&gt;5000 需要代码的话联系我diablo09070265@sina.com. 主要用来换积分的,想下几本书,所以做个小...

    026 阿拉伯数字转换为罗马数字 C语言

    026 阿拉伯数字转换为罗马数字 C语言

    罗马数字转换为大写汉字

    本文将详细介绍一个名为“CnumToHan”的类,它专门用于将罗马数字或阿拉伯数字转换为大写汉字。 首先,让我们理解罗马数字的基本概念。罗马数字是一种古老的数字表示方式,由七个不同的符号(I, V, X, L, C, D, M)...

    python 实现 罗马数字转阿拉伯

    python 实现 罗马数字转阿拉伯

    阿拉伯转换成罗马数字

    采用语法制导翻译模式框架将阿拉伯转罗马数字,做《编译原理》(龙书)后第2章习题,不知道对不??MSVC6编译

    Python简单实现阿拉伯数字和罗马数字的互相转换功能示例

    在编程语言Python中实现阿拉伯数字与罗马数字之间的互相转换是一个涉及基础算法和数据结构操作的实用功能。阿拉伯数字即我们通常使用的0-9的计数系统,而罗马数字则是源于古罗马的一种非位值制的记数系统,它由七个...

    BAT批处理脚本-格式转换-阿拉伯与罗马数字互转程序.cmd.zip

    例如,脚本可能会先检查输入是否为有效的阿拉伯数字,然后逐位处理,将每一位转换成罗马数字。在转换过程中,可能会用到SET命令来设置变量,以及ECHO命令来显示结果。 总的来说,这个压缩包提供的批处理脚本可以...

    php实现阿拉伯数字和罗马数字相互转换的方法

    首先,我们来看`dec2roman`函数,它的作用是将一个阿拉伯数字转换成罗马数字。这个函数首先检查输入的参数`$f`是否为有效的数字,即它是否在0到3999的范围内。因为罗马数字传统上只表示1到3999的数值。接着,定义了...

    Java实现的求解经典罗马数字和阿拉伯数字相互转换问题示例

    "Java实现的求解经典罗马数字和阿拉伯数字相互转换问题示例" 本文主要介绍了Java实现的求解经典罗马数字和阿拉伯数字相互转换问题,涉及Java输入输出及字符串、数组的遍历与转换相关操作技巧。 首先,让我们了解...

    将用罗马数字表示的金额转化为中文大写表示

    1. **罗马数字到阿拉伯数字**:首先,我们需要编写一个函数,将输入的罗马数字字符串转换为其对应的阿拉伯数字。这可以通过创建一个映射表,存储每个罗马数字对应阿拉伯数字的值,然后遍历字符串并应用加减法则来...

    Python将阿拉伯数字转换为罗马数字的方法

    本文实例讲述了Python将阿拉伯数字转换为罗马数字的方法。分享给大家供大家参考。具体实现方法如下: def numToRomanNum(Num): digital will be converted into Roman numerals,Ex: numToRomanNum(3999) if Num ...

Global site tag (gtag.js) - Google Analytics