/* 罗马数字转十进制古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来简直不能忍受,所以在现代很少使用了。之所以这样,不是因为发明表示法的人的智力的问题,而是因为一个宗教的原因,当时的宗教禁止在数字中出现0的概念!罗马数字的表示主要依赖以下几个基本符号:I  1V  5X  10L  50C  100D  500M  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,99C,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){int sum = 0;  // 总和for(int i=0;i<s.length();i++){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;   // 前小后大时,sum=大-小i++; // 这里的i++和(for里的i++) i 会后移两位 ,再次进行}else{// 前大后小,或者相等时, sum = 前大元素  , 上边的(for里的i++) i 会后移一位sum += a;}}return sum;}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[n];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]));}}
}

方法二:(用Map添加对应数字)

import java.util.Scanner;
import java.util.HashMap;public class 罗马数字转十进制2 {@SuppressWarnings("serial")static HashMap<Character,Integer> Map = new HashMap<Character,Integer>(){{put('I',1);put('V',5);put('X',10);put('L',50);put('C',100);put('D',500);put('M',1000);}};public static int format(String s){int sum = 0;   // 总和int i=0;while(i<s.length()){int a = Map.get(s.charAt(i));int b ;if(i+1<s.length()){b = Map.get(s.charAt(i+1));}else{b = 0;}if(a<b){sum += b - a;i += 2;}else{sum += a;i++;}}return sum;}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[n];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

罗马数字转十进制 古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候, 现在看起来简直不能忍受,所以在现代很少使用了。相关推荐

  1. c语言罗马数字转十进制,罗马数字转十进制的三种方法

    题目要求古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来简直不能忍受,所以在现代很少使用了. 之所以这样,不是因为发明表示法的人的智力的问题,而是因为一 ...

  2. 罗马java_关于java:罗马数字转十进制的三种方法

    题目要求 古罗马帝国创始了辉煌的人类文明,但他们的数字表示法确实有些繁琐,尤其在示意大数的时候,当初看起来几乎不能忍耐,所以在古代很少应用了. 之所以这样,不是因为创造表示法的人的智力的问题,而是因为 ...

  3. c语言罗马数字转十进制,将罗马数字转换为十进制

    嘿,我认为我很亲密,但我不太确定如何继续.所有与我的问题有关的问题都没有真正回答.那我得到现在的错误是将罗马数字转换为十进制 (33): error C2064: term does not eval ...

  4. Unix / 类 Unix shell 中有哪些很酷很冷门很少用很有用的命令?(转)

    著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:孙立伟 链接:http://www.zhihu.com/question/20140085/answer/14107336 ...

  5. 世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?

    来自公众号:五分钟学算法 今天分享四个代码量很少,但很牛逼很经典的算法或项目案例. 1.no code 项目地址: https://github.com/kelseyhightower/nocode ...

  6. 郭的好象在推销,实在内容很少.

    郭的好象在推销,实在内容很少. 转载于:https://blog.51cto.com/328241/255043

  7. 3星|《掌控大趋势》:全球当前政治经济形式的资料汇编整理,对未来的预测很少,也缺乏独到深刻的见解...

    掌控大趋势:如何正确认识.掌控这个变化的世界 全书基本是当前全球政治经济形式的公开资料的汇编整理,对未来的预测比较少.个人看法书中也缺乏独到或深刻的见解. 总体评价3星,有一些参考价值. 以下是书中一 ...

  8. python中文名字叫什么-Python为什么取名为Python,很少人知道

    原标题:Python为什么取名为Python,很少人知道 打开世界编程语言排行榜,出现在榜单上的语言名称多半都让人一头雾水.一些编程语言的作者会以「这种语言是什么」来命名语言,比如 BASIC.COB ...

  9. ensp启动设备蓝屏_为什么早期的Windows经常死机蓝屏,现在却很少发生?这些你都知道吗?...

    往事不堪回首呀,试问当年有多少小伙伴的电脑被一些看起来很好用的小工具弄到蓝屏的呢?老实说哦. 但大家不妨想想,对比于今天的电脑,发生蓝屏死机的概率确实比以往少了许多,这是为什么呢?老毛桃涉猎了一番,据 ...

最新文章

  1. mac os x 添加 用户 所属 组
  2. .NET Core 中的路径问题
  3. AT5 two-dimensional objects - the torus and genus
  4. 手把手教你Android手机与BLE终端通信--连接,发送和接收数据
  5. 为ASP.NET AJAX 1.0 Beta补充trace和dump功能
  6. HBASE table导出到文件的方法
  7. ssh详细原理流程及配置
  8. LAMMPS分子动力学模拟技术与应用 第一性原理计算方法及应用
  9. 树莓派 之 USB摄像头安装和使用
  10. 通俗理解三维向量的点乘与叉乘
  11. 用友NC V6.5 6.33 6.31 6.3 6.1 2019新个人所得税增强包税改升级补丁包
  12. Flutter随记四:null safe之 ??= 和??和 ?使用区别
  13. SEO系列之站内优化
  14. 云计算的二十个基本定义 不可不知!
  15. 【重新安装MySql5.7.24 / MySql57过程】好多个错误,慢慢改好的
  16. MybatisPlus学习〖四〗报错篇 WARNWarn: Could not find @TableId in Class: com.fehead.OceanCode.dataobject
  17. easyexcel已存在的excel里追加数据
  18. Apple补丁解决iOS、iPadOS和macOS中的0day漏洞
  19. Linux ❀ KickStart-无人值守部署
  20. 宝德服务器系统,宝德服务器系统管理平台用户指南.pdf

热门文章

  1. 智能语音时代,需要了解什么?
  2. 怎么能看出来一个人善不善良?
  3. cad序列号2016申请号_安装 CAD 踩坑
  4. 大道至简:软件工程实践者的思想读后感
  5. 医院计算机五大应用系统,医院计算机五大应用系统
  6. 【信号】用matlab实现一维信号的高斯滤波
  7. npf拒绝访问的问题
  8. oracle 11g的安装
  9. 让页面无懈可击!关于 CSS,你该做好这 20 件事
  10. 【操作系统】30天自制操作系统--(9)叠加处理