• 整数转罗马数字


    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

    字符 数值
    I 1
    V 5
    X 10
    L 50
    C 100
    D 500
    M 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。

    给你一个整数,将其转为罗马数字。

    示例 1:
    输入: num = 3
    输出: “III”

    示例 2:
    输入: num = 4
    输出: “IV”

    示例 3:
    输入: num = 9
    输出: “IX”

    示例 4:
    输入: num = 58
    输出: “LVIII”
    解释: L = 50, V = 5, III = 3.

    示例 5:
    输入: num = 1994
    输出: “MCMXCIV”
    解释: M = 1000, CM = 900, XC = 90, IV = 4.

    解法:

    /**
     * @param {number} num
     * @return {string}
     * 哈希法
     */
    var intToRoman = function (num) {
        const numMap = {
            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'
        }
        let romanNum = '', strNum = String(num), len = strNum.length
        for (let i = 0; i < len; i++) {
            let tempNumStr = strNum[i]
            if (tempNumStr !== '0') {
                let newNum = Number(tempNumStr + '0'.repeat(len - i - 1))
                romanNum += numMap[newNum]
            }
        }
        return romanNum
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    在这里插入图片描述

    解法二:

    /**
     * @param {number} num
     * @return {string}
     */
    var intToRoman = function (num) {
        const romanList = ['M','CM','D','CD','C','XC','L','XL','X','IX','V','IV','I'];
        const numList   = [1000,900,500,400,100,90,50,40,10,9,5,4,1];
        let romanNum = ''
        for(let i=0;i<numList.length;i++){
            const tempNum = numList[i]
            while(num>=tempNum){
                num -= tempNum;
                romanNum += romanList[i];
            }
            if(num===0) return romanNum
        }
        return romanNum
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述

  • 相关阅读:
    【毕业设计】基于单片机的宠物自动喂食系统 - 物联网 嵌入式 单片机 宠物喂食系统 宠物投食系统
    CBAM:Convolutional Block Attention Module--通道+空间混合注意力
    中国大学MOOC地下水污染与防治答案
    为域名加https的方法是什么?
    《C++代码简洁之道》学习笔记:C++代码整洁的基本规范
    JavaWeb框架搭建之旅(三)----集成mybatisplus
    使用python获取浏览器收藏夹和历史浏览记录,然后可以...
    php笔记1
    PHP代码审计DVWA\PHP代码审计DVWA文件上传[File Upload]
    JMeter-- token写入/读取csv文件+清除掉token的csv文件
  • 原文地址:https://blog.csdn.net/GXY1551705593/article/details/134495929