##お題
10進法をローマ数字へ変換する。
function convertToRoman(num) {
//write your code.
return ;
}
convertToRoman(649);//DCXLIX
##出力結果 例
convertToRoman(68) // "LXVIII"
convertToRoman(891) // "DCCCXCI"
convertToRoman(3999) // "MMMCMXCIX"
##使ったもの
for文
while文
##考え方
前提 ローマ数字と10進法の対応関係
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
・変換前の数字と対応関係にある数字1000から順番に小さくなるように比較する。
・対応関係にある数字が含まれていれば、対応するアルファベットを新しい配列に格納する。そのあとに変換前の数字から対応関係にある数字を差し引く。
・差し引いた後の数字と対応関係にある次の数が含まれているか比較する。含まれているものがなくなるまで上記の処理を繰り返す。
・比較するものがなくなったら用意した配列を返しておわり。
例
649の場合、1000,900は含まれてないので次の比較へ移る。
500は含まれているので、Dを配列に格納して500を引く(変換元149)。
100が含まれているのでCを格納して差し引く(49)。
50は飛ばして、40が含まれているのでXLを格納して差し引く(9)。
10は飛ばして、9に対応するIXを格納して比較するものがなくなる。
結果はDCXLIXになる。
##コード
function convertToRoman(num) {
var decimal = [ 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 ];
var romanNumeral = [ 'M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I' ];
var romanized = '';
for (var i = 0; i < decimal.length; i++) {
while (decimal[i] <= num) {
romanized += romanNumeral[i];
num -= decimal[i];
}
}
return romanized;
}
convertToRoman(649);//DCXLIX
###ES6など他のコードが浮かんだ方、コメントお待ちしております。