在一本書裡看到一段羅馬數字的程式, 需求如下,自己試著用python和erlang各寫了一遍,感覺有些地方還是不太舒服,大家看看這個程式還能怎麼改改更好
」),或者在某圖書館或某大學的貢獻牆上看到它們 (「成立於mdcccl***viii
」而不是「成立於1888
」)。你也可能在某些文獻的大綱或者目錄上看到它們。這是乙個表示數字的系統,它實際上能夠追溯到遠古的羅馬帝國 (因此而得名)。
在羅馬數字中,利用7個不同字母進行重複或者組合來表達各式各樣的數字。
下面是關於構造羅馬數字的一些通用的規則的介紹:
python版本:
add, del, unit, decade, hundred, thousend = 0, 1, 1, 10, 100, 1000
compute = lambda a,x,y: x + y if a == add else y + x
def maproman(num):
mapfun = mapnum()
return reduce(lambda x,y: x + y, map(mapfun,subtractnum(num, thousend, )))
def subtractnum(num, level, result):
if num == 0 :
return result if level == 0 else subtractnum(0, level/10, result + [(0, level)])
newnum = num / level
modnum = num % level
return subtractnum(modnum, level/10, result + [(newnum, level)])
def mapnum():
def func((num, level)):
action,actionnum,src,dst = getaction(num, level)
return getactionresult(action,actionnum,src,dst)
return func
def getaction(num, level):
dict =
one, five, ten = dict[level]
if num in range(1, 4):
return add, num - 1, one, one
elif num in range(5, 9):
return add, num - 5, five, one
elif num == 4:
return del, 1, five, one
elif num == 9:
return del, 1, ten, one
else:
return add, 0, "", ""
def getactionresult(action,num,src,dst):
if num == 0: return src
return getactionresult(action, num - 1, compute(action, src, dst), dst)
測試 myassert("mdcccl***viii", maproman(1888))
羅馬數字轉換
class solution object def romantoint self,s type s str rtype int 使用整數轉羅馬數的兩個列表 num tuple 1000,500,100,50,10,5,1 roman tuple m d c l x v i 使用dict和zip方法...
20190502 羅馬數字轉換為數字
羅馬數字包含以下七種字元 i,v,x,l,c,d 和 m。字元 數值 i 1 v 5 x 10 l 50 c 100 d 500 m 1000 例如,羅馬數字 2 寫做 ii 即為兩個並列的 1。12 寫做 xii 即為 x ii 27 寫做 xxvii,即為 xx v ii 通常情況下,羅馬數字中...
羅馬數字轉換為整數
給定乙個羅馬數字 s s,將羅馬數字轉換成整數。如羅馬數字i,ii,iii,iv,v分別代表數字 1,2,3,4,51,2,3,4,5。首先要來了解一下羅馬數字表示法,基本字元有 7 7 個 i v x l c d m,分別表示 11 5 5 1010 505 0 10010 0 50050 0 1...