扣丁學(xué)堂Java培訓(xùn)之實(shí)現(xiàn)經(jīng)典羅馬數(shù)字和阿拉伯?dāng)?shù)字相互轉(zhuǎn)換問題
本文實(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)系工作人員刪除。