您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何實(shí)現(xiàn)羅馬數(shù)字的轉(zhuǎn)化”,在日常操作中,相信很多人在如何實(shí)現(xiàn)羅馬數(shù)字的轉(zhuǎn)化問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何實(shí)現(xiàn)羅馬數(shù)字的轉(zhuǎn)化”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
問題描述
羅馬數(shù)字包含以下七種字符:I,V,X,L,C,D和M。
字符 數(shù)值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 |
例如,羅馬數(shù)字2寫做II,即為兩個并列的1。12寫做XII,即為X+II。27寫做XXVII,即為XX+V+II。
通常情況下,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊。但也存在特例,例如4不寫做IIII,而是IV。數(shù)字1在數(shù)字5的左邊,所表示的數(shù)等于大數(shù)5減小數(shù)1得到的數(shù)值4。同樣地,數(shù)字9表示為IX。這個特殊的規(guī)則只適用于以下六種情況:
I可以放在V(5)和X(10)的左邊,來表示4和9
X可以放在L(50)和C(100)的左邊,來表示40和90。
C可以放在D(500)和M(1000)的左邊,來表示400和900
示例1:
輸入:3
輸出:"III"
解釋:有三個"I"加在一起
示例2:
輸入:4
輸出:"IV"
示例3:
輸入:58
輸出:"LVIII"
解決方案
當(dāng)題目中出現(xiàn)了羅馬數(shù)字列表,首先要想到的便是字典,因?yàn)樽值渲械膙alue和key的條件關(guān)系正好可以對于羅馬數(shù)字字符的轉(zhuǎn)化,這里就可以得到一組字典,那么再回到題目,仔細(xì)觀察可以發(fā)現(xiàn),每一個羅馬字符所對應(yīng)的數(shù)值都是正整數(shù)而且可以被5整除(1除外),那么就可以思考,當(dāng)輸入一個數(shù)值過后,去把轉(zhuǎn)化字符的過程中,是否可以通過整除的方式來進(jìn)行轉(zhuǎn)化,例如,當(dāng)輸入一個數(shù)值:21,自然它的羅馬字符為XXI,仔細(xì)觀察和思考,可以這么去思考它是被10整除得到2,2也就是兩個XX,剩下的1可以被I整除得到一個I,兩個互相合并,得到的XXI,這么一想,就可以得到一個結(jié)論,用數(shù)值去除以字典中能夠被整除的最大數(shù)值,得到的數(shù)就是相對應(yīng)的多少個羅馬字符,那么此題也便迎刃而解。
羅馬數(shù)字的轉(zhuǎn)化Python代碼
num=int(input()) dict_hs={1000:'M',900:'CM',500:'D',400:'CD',100:'C',90:'XC',50:'L',40:'XL',10:'X',9:'IX',5:'V',4:'IV',1:'I'} res='' forkeyindict_hs: ifnum//key!=0: count=num//key res+=dict_hs[key]*count num-=key*count print(res) |
上面代碼的解題思路主要是以哈希表來進(jìn)行解答,這也是絕大多數(shù)學(xué)者的解題思路,但是在力扣此題評論區(qū)的大佬卻讓我刮目相看,對此題又有了不同的想法,一位大佬說到用列表可以替換哈希表,大體的思路就是創(chuàng)建兩個列表,列表內(nèi)的元素與羅馬字符一一對應(yīng),運(yùn)用for循環(huán)遍歷長度,再通過下標(biāo)解決,解題思路非常奇妙。
num=int(input()) N=['M','CM','D','CD','C','XC','L','XL','X','IX','V','IV','I'] n=[1000,900,500,400,100,90,50,40,10,9,5,4,1] ans='' foriinrange(len(n)): ifnum>=n[i]: count=num//n[i] num-=n[i]*count ans+=N[i]*count print(ans) |
運(yùn)行示例:
到此,關(guān)于“如何實(shí)現(xiàn)羅馬數(shù)字的轉(zhuǎn)化”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。