整数转罗马数字
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M
字符 数值I 1V 5X 10L 50C 100D 500M 1000
- 例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
- 通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
- I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
- X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
- C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
- 给你一个整数,将其转为罗马数字。
🌰:
输入: num = 3输出: "III"
输入: num = 58输出: "LVIII"解释: L = 50, V = 5, III = 3.
输入: num = 1994输出: "MCMXCIV"解释: M = 1000, CM = 900, XC = 90, IV = 4.
解题过程✏:
- 先获取当前位数的值,然后根据它们的特性在romanArray中找到对应的罗马数字,再结合起来。
```javascript
const intToRoman = function (num) {
const romanArray = [
{
text: “I”,
num: 1,
},
{
text: “V”,
num: 5,
},
{
text: “X”,
num: 10,
},
{
text: “L”,
num: 50,
},
{
text: “C”,
num: 100,
},
{
text: “D”,
num: 500,
},
{
text: “M”,
num: 1000,
},
];
let romanStr = “”;
let length = num.toString().length;
while (length—) {
const temp = Number(“1” + “0”.repeat(length));
const value = Math.floor(num / temp);
if (value !== 0) {
if ((value + 1) % 5 === 0) {
} else if (Number.isInteger(value / 5)) {// 4,9const t1 = romanArray.find((item) => item.num === (value + 1) * temp);const t2 = romanArray.find((item) => item.num === temp);romanStr += t2.text + t1.text;
} else if (Math.floor(value / 5) !== 0) {// 10,5 const t1 = romanArray.find((item) => item.num === value * temp); romanStr += t1.text;
} else {// 6,7,8 const t1 = romanArray.find((item) => item.num === 5 * temp); const t2 = romanArray.find((item) => item.num === 1 * temp); romanStr += t1.text + t2.text.repeat(value % 5);
} } num = num % temp; } return romanStr; };// 2,3,4 const t1 = romanArray.find((item) => item.num === temp); romanStr += t1.text.repeat(value);
const result = intToRoman(1994); console.log(result); ```
