Java培训之实现经典罗马数字和阿拉伯数字相互转

      2020-01-08 21:07      JAVA编程
本文实例讲述了之实现经典罗马数字和阿拉伯数字相互转换问题。分享给大家供大家参考,具体如下:



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

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

I1V5X10L50C100D500M1000

这里,我们只介绍一下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行,就是罗马数字对应的十进制数据。

例如,用户输入:

3LXXXXCIIIDCCII

则程序应该输出:

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


运行结果:

以上就是关于之实现经典罗马数字和阿拉伯数字相互转换问题示例的详细介绍,最后