溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何實(shí)現(xiàn)羅馬數(shù)字的轉(zhuǎn)化

發(fā)布時間:2021-10-14 14:07:38 來源:億速云 閱讀:160 作者:iii 欄目:編程語言

這篇文章主要介紹“如何實(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)行示例:

如何實(shí)現(xiàn)羅馬數(shù)字的轉(zhuǎn)化

如何實(shí)現(xiàn)羅馬數(shù)字的轉(zhuǎ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í)用的文章!

向AI問一下細(xì)節(jié)

免責(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)容。

AI