JavaScriptで正の整数をローマ数字に変換するプログラムの作り方
はじめに
本記事では、正の整数(10進数)を受け取って、そのローマ数字表現を返すJavaScript関数を作成します。ローマ数字とは、I(1)・V(5)・X(10)・L(50)・C(100)・D(500)・M(1000)などの記号を組み合わせて数を表す、古代ローマに由来する記数法のことです。
桁ごとの対応表を定義する
変換には、数値とローマ数字の対応表(レジェンド)を使用します。1の位から9000まで、IVやXLのような減算記法のパターンも含めて、あらかじめすべて定義しておくのがポイントです。
const legend = { 1: 'I', 2: 'II', 3: 'III', 4: 'IV', 5: 'V', 6: 'VI', 7: 'VII', 8: 'VIII', 9: 'IX', 10: 'X', 20: 'XX', 30: 'XXX', 40: 'XL', 50: 'L', 60: 'LX', 70: 'LXX', 80: 'LXXX', 90: 'XC', 100: 'C', 200: 'CC', 300: 'CCC', 400: 'CD', 500: 'D', 600: 'DC', 700: 'DCC', 800: 'DCCC', 900: 'CM', 1000: 'M', 2000: 'MM', 3000: 'MMM', 4000: 'MMMM', 5000: 'MMMMM', 6000: 'MMMMMM', 7000: 'MMMMMMM', 8000: 'MMMMMMMM', 9000: 'MMMMMMMMM' };サンプルコード
正の整数をローマ数字へ変換する実際のコードは、以下のとおりです。
const decimalToRoman = (num = 1) => {
const legend = { 1: 'I', 2: 'II', 3: 'III', 4: 'IV', 5: 'V', 6: 'VI',
7: 'VII', 8: 'VIII', 9: 'IX', 10: 'X', 20: 'XX', 30: 'XXX', 40: 'XL', 50:
'L', 60: 'LX', 70: 'LXX', 80: 'LXXX', 90: 'XC', 100: 'C', 200: 'CC', 300:
'CCC', 400: 'CD', 500: 'D', 600: 'DC', 700: 'DCC', 800: 'DCCC', 900: 'CM',
1000: 'M', 2000: 'MM', 3000: 'MMM', 4000: 'MMMM', 5000: 'MMMMM', 6000:
'MMMMMM', 7000: 'MMMMMMM', 8000: 'MMMMMMMM', 9000: 'MMMMMMMMM' };
const arr = num.toString().split("").reverse();
let i = 1, k;
for (k = 0; k < arr.length; k++) {
arr.splice(k, 1, arr[k] * i);
i *= 10;
};
const romansArray = [];
for (i = 0; i < arr.length; i++) {
romansArray.push(legend[arr[i]] || '');
}
return romansArray.reverse().join("");
}
console.log(decimalToRoman(345));コードの解説
処理の流れを、順を追って確認していきましょう。
- 数値の分解:まず
toString()で文字列化し、split("")で1桁ずつ配列に分割します。その後、reverse()で並び順を反転させます。 - 位の値を復元:反転した各桁に1・10・100…と順に掛け合わせることで、元の位の値(例:345なら[5, 40, 300])に戻します。
- ローマ数字へ置き換え:対応表
legendから該当するローマ数字を取得します。該当するものがない場合は空文字列に置き換えます。 - 連結して完成:最後にもう一度
reverse()で並びを戻し、join("")で連結するとローマ数字の文字列が完成します。
出力結果
コンソールには次のように出力されます。
CCCXLV
-
JavaScriptのconst宣言とは?再代入できない変数の基本と使い方を解説
JavaScriptのconst宣言は、値を再代入することも後から再宣言することもできない変数を作成するための構文です。constはES2015(ES6)で導入されました。 const宣言の主な特徴 一度値を代入すると、別の値に再代入することはできません。 同じ名前の変数を同じスコープ内で再宣言するとエラーになります。 宣言時に必ず初期値を代入する必要があります。 ブロックスコープ({}内でのみ有効)を持ちます。 それでは、JavaScriptにおけるconst宣言の実際のコードを見ていきましょう。 サンプルコード <!DOCTYPE html> <html>
-
JavaScriptで24時間表記を12時間表記(午前・午後)に変換する方法
JavaScriptで24時間表記を12時間表記(午前・午後)に変換する方法 Webアプリケーションを開発していると、24時間表記の時刻を「午前・午後」が付いた12時間表記に変換して表示したい場面があります。この記事では、JavaScriptとHTMLを組み合わせて、ユーザーが入力した時刻を12時間表記に変換し、その結果を画面に表示するシンプルなプログラムを紹介します。 コード例 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" />