• lintcode-418-整数转罗马数字


    418-整数转罗马数字

    给定一个整数,将其转换成罗马数字。
    返回的结果要求在1-3999的范围内。

    说明

    什么是 罗马数字?

    样例

    4 -> IV
    12 -> XII
    21 -> XXI
    99 -> XCIX

    更多案例,请戳 http://literacy.kent.edu/Minigrants/Cinci/romanchart.htm

    标签

    字符串处理

    思路

    罗马字符的基本字符有:I、V、X、L、C、D、M
    相应的阿拉伯数字表示为:1、5、10、50、100、500、1000
    记数方法如下

    • 相同的数字连写、所表示的数等于这些数字相加得到的数、如:Ⅲ=3;
    • 小的数字在大的数字的右边、所表示的数等于这些数字相加得到的数、 如:Ⅷ=8、Ⅻ=12;
    • 小的数字(限于 I、X 和 C)在大的数字的左边、所表示的数等于大数减小数得到的数、如:Ⅳ=4、Ⅸ=9;
    • 正常使用时、连写的数字重复不得超过三次;
    • 在一个数的上面画一条横线、表示这个数扩大 1000 倍。

    有两条须注意掌握:

    • 基本数字 Ⅰ、X 、C 中的任何一个、自身连用构成数目、或者放在大数的右边连用构成数目、都不能超过三个;放在大数的左边只能用一个;
    • 不能把基本数字 V 、L 、D 中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目、只能使用一个;

    code

    class Solution {
    public:
        /*
         * @param n: The integer
         * @return: Roman representation
         */
        string intToRoman(int n) {
            // write your code here
            if (n < 1 || n> 3999) {
                return "";
            }
            char* c[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" }
            };
            string roman;
            roman.append(c[3][n / 1000 % 10]);
            roman.append(c[2][n / 100 % 10]);
            roman.append(c[1][n / 10 % 10]);
            roman.append(c[0][n % 10]);
    
            return roman;
        }
    };
    
  • 相关阅读:
    POJ 3744:Scout YYF I 概率DP+特征方程+快速幂
    浏览器实现颜色渐变效果(兼容)
    css透明(支持各浏览器)
    sql server密钥
    DDL(Oracle)
    DML(Oralce)
    SQL(Oracle)
    Reflect
    Exception
    XML语法
  • 原文地址:https://www.cnblogs.com/libaoquan/p/7365793.html
Copyright © 2020-2023  润新知