Thuật toán: trừ dần giá trị lớn nhất có thể từ số La Mã mapping table.
Ví dụ
<!DOCTYPE html>
<html>
<body>
<script>
const romanNum = ["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"];
const decNum = [1000,900,500,400,100,90,50,40,10,9,5,4,1];
function decimalToRoman(value) {
if (value <= 0 || value >= 4000) return "Out of range (1-3999)";
let roman = "";
for (let i = 0; i < romanNum.length; i++) {
while (value >= decNum[i]) {
value -= decNum[i];
roman += romanNum[i];
}
}
return roman;
}
console.log(decimalToRoman(39)); // XXXIX
console.log(decimalToRoman(145)); // CXLV
console.log(decimalToRoman(520)); // DXX
console.log(decimalToRoman(1994)); // MCMXCIV
</script>
</body>
</html>
Kết quả
XXXIX CXLV DXX MCMXCIV
Hỗ trợ 1-3999 (giới hạn ký hiệu La Mã chuẩn).