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

這篇文章主要介紹“如何實現(xiàn)羅馬數(shù)字的轉(zhuǎn)化”,在日常操作中,相信很多人在如何實現(xiàn)羅馬數(shù)字的轉(zhuǎn)化問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何實現(xiàn)羅馬數(shù)字的轉(zhuǎn)化”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

我們提供的服務(wù)有:成都網(wǎng)站制作、網(wǎng)站設(shè)計、外貿(mào)網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、競秀ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的競秀網(wǎng)站制作公司

問題描述

羅馬數(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"

解決方案

當題目中出現(xiàn)了羅馬數(shù)字列表,首先要想到的便是字典,因為字典中的value和key的條件關(guān)系正好可以對于羅馬數(shù)字字符的轉(zhuǎn)化,這里就可以得到一組字典,那么再回到題目,仔細觀察可以發(fā)現(xiàn),每一個羅馬字符所對應(yīng)的數(shù)值都是正整數(shù)而且可以被5整除(1除外),那么就可以思考,當輸入一個數(shù)值過后,去把轉(zhuǎn)化字符的過程中,是否可以通過整除的方式來進行轉(zhuǎn)化,例如,當輸入一個數(shù)值:21,自然它的羅馬字符為XXI,仔細觀察和思考,可以這么去思考它是被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)

上面代碼的解題思路主要是以哈希表來進行解答,這也是絕大多數(shù)學(xué)者的解題思路,但是在力扣此題評論區(qū)的大佬卻讓我刮目相看,對此題又有了不同的想法,一位大佬說到用列表可以替換哈希表,大體的思路就是創(chuàng)建兩個列表,列表內(nèi)的元素與羅馬字符一一對應(yīng),運用for循環(huán)遍歷長度,再通過下標解決,解題思路非常奇妙。

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)

運行示例:

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

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

到此,關(guān)于“如何實現(xiàn)羅馬數(shù)字的轉(zhuǎn)化”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

網(wǎng)站欄目:如何實現(xiàn)羅馬數(shù)字的轉(zhuǎn)化
分享路徑:http://bm7419.com/article28/psoijp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、企業(yè)建站、定制網(wǎng)站、網(wǎng)站制作、品牌網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)