博客專欄

EEPW首頁(yè) > 博客 > 扣丁學(xué)堂Java培訓(xùn)之實(shí)現(xiàn)經(jīng)典羅馬數(shù)字和阿拉伯?dāng)?shù)字相互轉(zhuǎn)換問題

扣丁學(xué)堂Java培訓(xùn)之實(shí)現(xiàn)經(jīng)典羅馬數(shù)字和阿拉伯?dāng)?shù)字相互轉(zhuǎn)換問題

發(fā)布人:扣丁客1 時(shí)間:2020-12-28 來源:工程師 發(fā)布文章

本文實(shí)例講述了Java培訓(xùn)之實(shí)現(xiàn)經(jīng)典羅馬數(shù)字和阿拉伯?dāng)?shù)字相互轉(zhuǎn)換問題。分享給大家供大家參考,具體如下:

古羅馬帝國(guó)開創(chuàng)了輝煌的人類文明,但他們的數(shù)字表示法的確有些繁瑣,尤其在表示大數(shù)的時(shí)候,現(xiàn)在看起來簡(jiǎn)直不能忍受,所以在現(xiàn)代很少使用了。之所以這樣,不是因?yàn)榘l(fā)明表示法的人的智力的問題,而是因?yàn)橐粋€(gè)宗教的原因,當(dāng)時(shí)的宗教禁止在數(shù)字中出現(xiàn)0的概念!

羅馬數(shù)字的表示主要依賴以下幾個(gè)基本符號(hào):

I1
V5
X10
L50
C100
D500
M1000

這里,我們只介紹一下1000以內(nèi)的數(shù)字的表示法。

單個(gè)符號(hào)重復(fù)多少次,就表示多少倍。最多重復(fù)3次。比如:CCC表示300XX表示20,但150并不用LLL表示,這個(gè)規(guī)則僅適用于IXCM。

如果相鄰級(jí)別的大單位在右,小單位在左,表示大單位中扣除小單位。比如:IX表示9IV表示4XL表示40更多的示例參見下表,你找到規(guī)律了嗎?

  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

本題目的要求是:請(qǐng)編寫程序,由用戶輸入若干個(gè)羅馬數(shù)字串,程序輸出對(duì)應(yīng)的十進(jìn)制表示。

輸入格式是:第一行是整數(shù)n,表示接下來有n個(gè)羅馬數(shù)字(n<100)。以后每行一個(gè)羅馬數(shù)字。羅馬數(shù)字大小不超過999。

要求程序輸出n行,就是羅馬數(shù)字對(duì)應(yīng)的十進(jìn)制數(shù)據(jù)。

例如,用戶輸入:

3
LXXX
XCIII
DCCII

則程序應(yīng)該輸出:

80
93
702
  importjava.util.Scanner;
  /**
  *請(qǐng)編寫程序,由用戶輸入若干個(gè)羅馬數(shù)字串,程序輸出對(duì)應(yīng)的十進(jìn)制表示。
  *
  *輸入格式是:第一行是整數(shù)n,表示接下來有n個(gè)羅馬數(shù)字(n<100)。以后每行一個(gè)羅馬數(shù)字。羅馬數(shù)字大小不超過999。
  *
  *要求程序輸出n行,就是羅馬數(shù)字對(duì)應(yīng)的十進(jìn)制數(shù)據(jù)。
  *
  *例如,用戶輸入:3LXXXXCIIIDCCII
  *
  *則程序應(yīng)該輸出:8093702
  *
  *@authorAdministrator
  *
  */
  publicclassRomeToArabic{
  publicstaticvoidmain(String[]args){
  //TODOAuto-generatedmethodstub
  System.out.println("腳本之家測(cè)試結(jié)果:");
  ScannermScanner=newScanner(System.in);
  System.out.println(r2a(mScanner.nextLine()));
  System.out.println(a2r(mScanner.nextInt()));
  }
  /**
  *把羅馬數(shù)字轉(zhuǎn)換為阿拉伯?dāng)?shù)字
  *
  *@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;
  }
  /**
  *把阿拉伯?dāng)?shù)字轉(zhuǎn)換為羅馬數(shù)字
  *
  *@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;
  }
  }

運(yùn)行結(jié)果:

以上就是關(guān)于Java培訓(xùn)之實(shí)現(xiàn)經(jīng)典羅馬數(shù)字和阿拉伯?dāng)?shù)字相互轉(zhuǎn)換問題示例的詳細(xì)介紹,最后想要了解更多關(guān)于Java開發(fā)問題的小伙伴可以登錄扣丁學(xué)堂官網(wǎng)咨詢??鄱W(xué)堂是專業(yè)的Java培訓(xùn)機(jī)構(gòu),不僅有專業(yè)的老師和與時(shí)俱進(jìn)的課程體系,還有大量的Java視頻教程供學(xué)員觀看學(xué)習(xí),想要學(xué)好Java的小伙伴抓緊時(shí)間行動(dòng)吧??鄱W(xué)堂java技術(shù)交流群:487098661。微信號(hào):codingbb

*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



關(guān)鍵詞:

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉