LoginSignup
2
0

More than 5 years have passed since last update.

js ローマ数字変換

Last updated at Posted at 2016-12-28

お題

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など他のコードが浮かんだ方、コメントお待ちしております。

2
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0