Convert the given number into a roman numeral
JavaScript impl (with comment):
/*
param: num
just give a number between 1 ~ 3999
*/
function convertToRoman(num) {
// parse int number to a string
var numStr = num+"";
// construct roman numeral map
var roman = {
1:"I",
5:"V",
10:"X",
50:"L",
100:"C",
500:"D",
1000:"M"
};
/*
iterate the given string from the end to start,
loop once that variable bit will times 10,
this will select the corresponse value in object roman
*/
for(var i=numStr.length-1,bit = 1,res =[];i>=0;i--,bit*=10){
var ch = numStr.charAt(i);
var element = convertToRomanNumWithBit(roman,ch,bit);
res.push(element);
}
/*
since iterate the given number from the end to start just now,
so reverse the array makes the order of number correct ,
and return a new string that store the roman numeral
*/
num = res.reverse().join('');
return num;
}
/*
param : romanNumTable ,
ch -- the 1-digit number or string ,
bit -- the bit of ch ,
demo: 2567
ch = 5, bit = 100
*/
function convertToRomanNumWithBit(romanNumTable,ch,bit){
var str="";
if(ch<4)
str = romanNumTable[1*bit].repeat(parseInt(ch));
else if(ch == 5)
str = romanNumTable[5*bit];
else if(ch == 4)
str = romanNumTable[1*bit].concat(romanNumTable[5*bit]);
else if(ch == 9)
str = romanNumTable[1*bit].concat(romanNumTable[1*bit*10]);
else
str = romanNumTable[5*bit].concat(romanNumTable[1*bit].repeat(parseInt(ch)-5));
return str;
}