• 12. Integer to Roman


    题目:
    LeetCode:12. Integer to Roman

    描述:

    Given an integer, convert it to a roman numeral.
    Input is guaranteed to be within the range from 1 to 3999.
    
    

    题意为 给定一个整数(1-3999)转换为罗马数字输出。

    分析:

    暴力方式

     // 思路;
    1、正常来说根据罗马数字的规则,I(1), V(5), X(10), L(50), C(100), D(500), M(1000),
    I II III IV V VI VII VIII IX X (I V X)作为一组 就如同十进制的1 - 10
    (X L C)可以表示 10 - 100之间数值 (C D M)表示 100 - 1000数值
    2、由于本题限制为(1-3999) 采取比较暴力的方式进行解题:
    遍历传入数字,将其各个数位上数字进行罗马数字显示 (1112)M C X I
    

    进制思路

     // 思路;
      >  1. 暴力方式
     // 思路;
    1、"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"
    分别代表 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1的含义
    本质上还是一种和十进制相似的进制。
    2、由于本题限制为(1-3999)
    

    代码:

    思路一:暴力方式

    string intToRoman(int num) {
        string strRomanNum;
        string Roman[4][10] = {
            { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" },
            { "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" },
            { "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" },
            { "", "M", "MM", "MMM" }
        };
        strRomanNum += Roman[3][((num / 1000) % 10)];
        strRomanNum += Roman[2][((num / 100) % 10)];
        strRomanNum += Roman[1][((num / 10) % 10)];
        strRomanNum += Roman[0][num % 10];
        return strRomanNum;
    }
    
    string intToRoman(int num) {
        string strRomanNum;
        string Roman[4][10] = {
            { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" },
            { "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" },
            { "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" },
            { "", "M", "MM", "MMM" }
        };
        int nTemp = num;
        int nCount = 0;
        while (nTemp > 0)
        {
            if ( nCount > 4 || (4 == nCount && nCount > 4))
            {
                break;
            }
            strRomanNum = Roman[nCount][nTemp % 10] + strRomanNum;
            nCount++;
            nTemp = nTemp / 10;
        }
        return strRomanNum;
    }
    
    

    思路二:进制思路

    string intToRoman2(int num)
    {
        int value[] = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
        string strScale[] = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
        string strRomanNum = "";
        for (int i = 0; num != 0; ++i)
        {
            while (num >= value[i])
            {
                num -= value[i];
                strRomanNum += strScale[i];
            }
        }
        return strRomanNum;
    }
    

    备注:

    1. 罗马数字的百科介绍
    2. 罗马数字“ 0”的存在
  • 相关阅读:
    Apache虚拟目录的建立
    自制户外登山地图傻瓜书
    经纬度与高克投影转换代码(VB)
    2000国家大地坐标系
    js格式化 Thu Mar 07 2019 12:00:00 GMT+0800 (中国标准时间) 及相互转化
    Javascript农历与公历相互转换
    Numpy
    日期多选插件Kalendae.js
    Scrapy项目实战
    bootstrapdatetimepicker添加支持显示农历节假日信息。
  • 原文地址:https://www.cnblogs.com/liuwfuang96/p/7010692.html
Copyright © 2020-2023  润新知