JavaScript 羅馬數字轉換器
在短暫的互聯網中斷期間尋找快速做的事情時,我編寫了一些代碼來轉換羅馬數字。備份後,我搜索了等效代碼,但只找到了多頁長的東西,限制了它可以轉換的範圍,或者兩者兼而有之。我想我不妨分享一下我的想法:
function romanize (num) { if (!+num) return false; var digits = String(+num).split(''); var key = ['','C','CC','CCC','CD','D','DC','DCC','DCCC','CM', '','X','XX','XXX','XL','L','LX','LXX','LXXX','XC', '','I','II','III','IV','V','VI','VII','VIII','IX']; var roman = '', i = 3; while (i--) roman = (key[+digits.pop() + (i * 10)] || '') + roman; return Array(+digits.join('') + 1).join('M') + roman; } function deromanize (str) { var str = str.toUpperCase(); var validator = /^M*(?:D?C{0,3}|C[MD])(?:L?X{0,3}|X[CL])(?:V?I{0,3}|I[XV])$/; var token = /[MDLV]|C[MD]?|X[CL]?|I[XV]?/g; var key = {M:1000,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1}; var num = 0, m; if (!(str && validator.test(str))) return false; while (m = token.exec(str)) num += key[m[0]]; return num; }
你會怎麼做 重寫這段代碼?你能創建一個更短的版本嗎?
下一篇
定時記憶