新闻  |   论坛  |   博客  |   在线研讨会
扣丁学堂Java培训之实现经典罗马数字和阿拉伯数字相互转换问题
扣丁客1 | 2020-12-28 15:02:09    阅读:3135   发布文章

本文实例讲述了Java培训之实现经典罗马数字和阿拉伯数字相互转换问题。分享给大家供大家参考,具体如下:

古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来简直不能忍受,所以在现代很少使用了。之所以这样,不是因为发明表示法的人的智力的问题,而是因为一个宗教的原因,当时的宗教禁止在数字中出现0的概念!

罗马数字的表示主要依赖以下几个基本符号:

I1
V5
X10
L50
C100
D500
M1000

这里,我们只介绍一下1000以内的数字的表示法。

单个符号重复多少次,就表示多少倍。最多重复3次。比如:CCC表示300XX表示20,但150并不用LLL表示,这个规则仅适用于IXCM。

如果相邻级别的大单位在右,小单位在左,表示大单位中扣除小单位。比如:IX表示9IV表示4XL表示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
  importjava.util.Scanner;
  /**
  *请编写程序,由用户输入若干个罗马数字串,程序输出对应的十进制表示。
  *
  *输入格式是:第一行是整数n,表示接下来有n个罗马数字(n<100)。以后每行一个罗马数字。罗马数字大小不超过999。
  *
  *要求程序输出n行,就是罗马数字对应的十进制数据。
  *
  *例如,用户输入:3LXXXXCIIIDCCII
  *
  *则程序应该输出:8093702
  *
  *@authorAdministrator
  *
  */
  publicclassRomeToArabic{
  publicstaticvoidmain(String[]args){
  //TODOAuto-generatedmethodstub
  System.out.println("脚本之家测试结果:");
  ScannermScanner=newScanner(System.in);
  System.out.println(r2a(mScanner.nextLine()));
  System.out.println(a2r(mScanner.nextInt()));
  }
  /**
  *把罗马数字转换为阿拉伯数字
  *
  *@paramm
  *@return
  */
  publicstaticintr2a(Stringm){
  intgraph[]=newint[400];
  graph['I']=1;
  graph['V']=5;
  graph['X']=10;
  graph['L']=50;
  graph['C']=100;
  graph['D']=500;
  graph['M']=1000;
  char[]num=m.toCharArray();
  intsum=graph[num[0]];
  for(inti=0;i<num.length-1;i++){
  if(graph[num[i]]>=graph[num[i+1]]){
  sum+=graph[num[i+1]];
  }else{
  sum=sum+graph[num[i+1]]-2*graph[num[i]];
  }
  }
  returnsum;
  }
  /**
  *把阿拉伯数字转换为罗马数字
  *
  *@paramnumber
  *@return
  */
  publicstaticStringa2r(intnumber){
  StringrNumber="";
  int[]aArray={1000,900,500,400,100,90,50,40,10,9,5,4,1};
  String[]rArray={"M","CM","D","CD","C","XC","L","XL","X",
  "IX","V","IV","I"};
  if(number<1||number>3999){
  rNumber="-1";
  }else{
  for(inti=0;i<aArray.length;i++){
  while(number>=aArray[i]){
  rNumber+=rArray[i];
  number-=aArray[i];
  }
  }
  }
  returnrNumber;
  }
  }

运行结果:

以上就是关于Java培训之实现经典罗马数字和阿拉伯数字相互转换问题示例的详细介绍,最后想要了解更多关于Java开发问题的小伙伴可以登录扣丁学堂官网咨询。扣丁学堂是专业的Java培训机构,不仅有专业的老师和与时俱进的课程体系,还有大量的Java视频教程供学员观看学习,想要学好Java的小伙伴抓紧时间行动吧。扣丁学堂java技术交流群:487098661。微信号:codingbb

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客