Answer
t.me/js_testОтвет:
const convertIntToRoman = (n) => { if (n >= 1000) return 'M' + convertIntToRoman(n - 1000); if (n >= 500) return n >= 900 ? 'CM' + convertIntToRoman(n - 900) : 'D' + convertIntToRoman(n - 500); if (n >= 100) return n >= 400 ? 'CD' + convertIntToRoman(n - 400) : 'C' + convertIntToRoman(n - 100); if (n >= 50) return n >= 90 ? 'XC' + convertIntToRoman(n - 90) : 'L' + convertIntToRoman(n - 50); if (n >= 10) return n >= 40 ? 'XL' + convertIntToRoman(n - 40) : 'X' + convertIntToRoman(n - 10); if (n >= 5) return n == 9 ? 'IX' : 'V' + convertIntToRoman(n - 5); if (n > 0) return n == 4 ? 'IV' : 'I' + convertIntToRoman(n - 1); return ''; };
Обьяснение:
Для начала давайте выпишем всевозможные римские цифры, ктр мы будем использовать:
- 7 однобуквенных символов, каждый со своим значением;
- правила вычитания дают дополнительные 6 символов.
I — 1, IV — 4, V — 5, IX — 9, X — 10, XL — 40, L — 50, XC — 90, C — 100, CD — 400, D — 500, CM — 900, M — 1000
Получаем, что представить целое число в виде римской цифры, необходимо найти последовательность из 13 римских символов, где их соот.значения складываются в целое число. Эта последовательность должна быть в порядке от наибольшего к наименьшему.
Итак, чтобы представить данное целое число, мы ищем самый большой символ, который в него помещается. Мы вычитаем это, а затем ищем самый большой символ, который умещается в остатке, и так до тех пор, пока остаток не станет 0. Каждый из извлеченных символов добавляется к выходной строке римских цифр.
Код для проверки:
const convertIntToRoman = (n) => { if (n >= 1000) return 'M' + convertIntToRoman(n - 1000); if (n >= 500) return n >= 900 ? 'CM' + convertIntToRoman(n - 900) : 'D' + convertIntToRoman(n - 500); if (n >= 100) return n >= 400 ? 'CD' + convertIntToRoman(n - 400) : 'C' + convertIntToRoman(n - 100); if (n >= 50) return n >= 90 ? 'XC' + convertIntToRoman(n - 90) : 'L' + convertIntToRoman(n - 50); if (n >= 10) return n >= 40 ? 'XL' + convertIntToRoman(n - 40) : 'X' + convertIntToRoman(n - 10); if (n >= 5) return n == 9 ? 'IX' : 'V' + convertIntToRoman(n - 5); if (n > 0) return n == 4 ? 'IV' : 'I' + convertIntToRoman(n - 1); return ''; }; console.log(convertIntToRoman(3)); // III console.log(convertIntToRoman(4)); // IV console.log(convertIntToRoman(9)); // IX console.log(convertIntToRoman(58)); // LVIII console.log(convertIntToRoman(1994)); // MCMXCIV