罗马数字转十进制 古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候, 现在看起来简直不能忍受,所以在现代很少使用了。
2013-04-24 20:57
211 查看
/* 罗马数字转十进制 古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候, 现在看起来简直不能忍受,所以在现代很少使用了。之所以这样,不是因为发明表示法的人的智力的问题, 而是因为一个宗教的原因,当时的宗教禁止在数字中出现0的概念! 罗马数字的表示主要依赖以下几个基本符号: I 1 V 5 X 10 L 50 C 100 D 500 M 1000 这里,我们只介绍一下1000以内的数字的表示法。 单个符号重复多少次,就表示多少倍。最多重复3次。 比如:CCC表示300 XX表示20, 但150并不用LLL表示,这个规则仅适用于I X C M。 如果相邻级别的大单位在右,小单位在左,表示大单位中扣除小单位。 比如:IX表示9 IV表示4 XL表示40 更多的示例参见下表,你找到规律了吗? I,1 II,2 III,3 IV,4 V,5 VI,6 VII,7 VIII,8 IX,9 X,10 XI,11 XII,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 本题目的要求是:请编写程序,由用户输入若干个罗马数字串,程序输出对应的十进制表示。 输入格式是:第一行是整数n,表示接下来有n个罗马数字(n<100)。 以后每行一个罗马数字。 罗马数字大小不超过999。 要求程序输出n行,就是罗马数字对应的十进制数据。 例如,用户输入: 3 LXXX XCIII DCCII 则程序应该输出: 80 93 702 注意: 请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分! 在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。 */ import java.util.Scanner; public class 罗马数字转十进制 { public static int getNum(char c){ switch(c){ case 'I': return 1; case 'V': return 5; case 'X': return 10; case 'L': return 50; case 'C': return 100; case 'D': return 500; case 'M': return 1000; } return 0; } public static int format(String s){ // 保存s.0 ,s1和s2比较,s3和s4比较...... int sum = getNum(s.charAt(0)); for(int i=1;i<s.length();i+=2){ int a,b; a = getNum(s.charAt(i)); if(i+1<s.length()){ b = getNum(s.charAt(i+1)); }else{ b = 0; } if(a<b){ sum += b-a; }else{ sum += a+b; } } // 初始值为0 ,s0和s1比较,s2和s3比较...... int sum2 = 0; for(int i=0;i<s.length();i+=2){ int a,b; a = getNum(s.charAt(i)); if(i+1<s.length()){ b = getNum(s.charAt(i+1)); }else{ b = 0; } if(a<b){ sum2 += b-a; }else{ sum2 += a+b; } } return sum<sum2?sum:sum2; } public static void main(String[] args){ Scanner scan = new Scanner(System.in); System.out.println("输入整数n,表示接下来有n个罗马数字(n<100)"); int n = scan.nextInt(); String[] s = new String ; scan.nextLine(); for(int i=0;i<n;i++){ // 输入数据 s[i] = scan.nextLine(); } for(int i=0;i<s.length;i++){ // 格式化并输出 System.out.println(format(s[i])); } } }
运行结果:
输入整数n,表示接下来有n个罗马数字(n<100) 3 LXXX XCIII DCCII 80 93 702
相关文章推荐
- 罗马数字转十进制 古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候, 现在看起来简直不能忍受,所以在现代很少使用了。
- 罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来简直不能忍受,所以在现代很少使用了。之所以这样,不是因为发明表示法的人的智力的问题,而是因为一个宗教的原因
- Maven学习 (四) 使用Nexus搭建Maven私服 为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找
- 你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料。为了让问题简单,我们用正整数表示不同颜色的颜料。你知道这幅画需要的n种颜色的颜料,你现在可以去商店购买一些颜料,但是商店不能保证能供应所有颜色的颜料,所以你需要自己混合一些颜料。混合两种不一样的颜色A和颜色B颜料可以产生(A XOR B)这种颜色的颜料(新产生的颜料也可以用作继续混合产生新的颜色,XOR表示异或操作)。本着勤俭节约的
- 自定义toast时,有些时候不能设置想要的宽和高(代码动态设置或使用文末方式)
- 埃及分数 古埃及曾经创造出灿烂的人类文明,他们的分数表示却很令人不解。
- 多语言环境下,使用SimpleDateFormat格式化时间字符串的时候,不能正确显示阿拉伯数字
- 我的VS2005采用的是web开发设置。不知道动到了那里,现在每次按F5启动调试的时候总是不能成功启动调试。效果和按CTRL+F5一样。就是把项目显示在了浏览器之后,那个启动调试的绿色按钮还可以使用,不是暗色的。
- oracle使用Union的时候遇到列格式clob和varchar2不符,不能转的问题
- 线程中通过信号和槽函数传递信息的时候,由于用到了自己定义的参数结构,所以使用qRegisterMetaType
- 现代数字影视 电影使用标准
- OJ刷题---罗马数字转十进制
- 写JS的时候,想强制刷新页面,有些代码却不能很好的兼容
- 买不到的数目(小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。 小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗)
- 有些时候也不能信谷歌翻译
- 注意在使用ArrayList进行for循环遍历的时候不能直接移除下标
- 从键盘输入某个十进制小数或整数,转换成对应的二进制小数并输出。 (查询十进制小数转换成二进制小数的算法,使用循环来实现。 最多保留小数位后7位数字即可)算法
- java使用poi解析或处理excel的时候,防止数字变成科学计数法的方法
- 使用VS2003创建WEB程序的时候出现"AutoMation服务器不能创建对象"错误
- Android使用EditText输入浮点型数字设置第一位不能输入小数点并且保留两位小数