Roman Numeral Converter

罗马数字规则:https://www.mathsisfun.com/roman-numerals.html

var romanNumArrays =
[
    [0,"I","II","III","IV","V","VI","VII","VIII","IX"],
    [0,"X","XX","XXX","XL","L","LX","LXX","LXXX","XC"],
    [0,"C","CC","CCC","CD","D","DC","DCC","DCCC","CM"],
    [0,"M","MM","MMM"]
]

function convertToRoman(num) {
    //数字转字符数组,并让arr[0] 为个位数,arr[1] 为十位数
    let numChars= (num+"").split("").reverse()
    let romanNumChars= []
    for(let i=0; i<numChars.length; i++) {
        //a = ["1","2"]  a["0"]也能用
        if(numChars[i]!=="0")//罗马数字没有零这个东西
            romanNumChars.push(romanNumArrays[i][numChars[i]])
    }
 return romanNumChars.reverse().join("");//个位数换回最右边
}

convertToRoman(12);

//小小重构
var romanArrays= 
[
    ["I","II","III","IV","V","VI","VII","VIII","IX"],
    ["X","XX","XXX","XL","L","LX","LXX","LXXX","XC"],
    ["C","CC","CCC","CD","D","DC","DCC","DCCC","CM"],
    ["M","MM","MMM"]
]

function convertToRoman(num) {

    //数字转字符数组
		//个位数放在最左边,利于匹配,arr[0] 为个位数,arr[1] 为十位数
    let numChars= (num + "").split("").reverse()

		//返回值
    let romanChars = []

    //i = 0 时处理个位数
    //i = 1 时处理十位数
    for(let i = 0; i < numChars.length; i++) {
        let num = numChars[i]*1//like "3" to 3
        if(num !== 0) {//罗马数字没有零这个东西
            let romanChar = romanArrays[i][num-1]//like "III"
            romanChars.push(romanChar)
        }
    }

		//个位数换回最右边
		return romanChars.reverse().join("");
}

convertToRoman(12);

测试数据:

convertToRoman(2) should return "II". convertToRoman(3) should return "III". convertToRoman(4) should return "IV". convertToRoman(5) should return "V". convertToRoman(9) should return "IX". convertToRoman(12) should return "XII". convertToRoman(16) should return "XVI". convertToRoman(29) should return "XXIX". convertToRoman(44) should return "XLIV". convertToRoman(45) should return "XLV" convertToRoman(68) should return "LXVIII" convertToRoman(83) should return "LXXXIII" convertToRoman(97) should return "XCVII" convertToRoman(99) should return "XCIX" convertToRoman(400) should return "CD" convertToRoman(500) should return "D" convertToRoman(501) should return "DI" convertToRoman(649) should return "DCXLIX" convertToRoman(798) should return "DCCXCVIII" convertToRoman(891) should return "DCCCXCI" convertToRoman(1000) should return "M" convertToRoman(1004) should return "MIV" convertToRoman(1006) should return "MVI" convertToRoman(1023) should return "MXXIII" convertToRoman(2014) should return "MMXIV" convertToRoman(3999) should return "MMMCMXCIX"