lintcode刷题——整数转罗马数字

本文介绍了一种将整数转换为罗马数字的算法,并提供了详细的C++代码实现。通过构建映射表并采用逐级匹配的方法,实现了1至3999范围内的整数到罗马数字的有效转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lintcode之整数转罗马数字,首先题目描述如下:

给定一个整数,将其转换成罗马数字。

返回的结果要求在1-3999的范围内。

样例

4 -> IV

12 -> XII

21 -> XXI

99 -> XCIX

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



思路如下:

1、首先将罗马数字里面一些特殊的值单独表示出来,即1000,900,500,400等;

2、将这些值与对应的罗马字符存入一个map之中,以便后面对其的使用;

3、将数字表示成罗马文字,将数字对这些特殊的值做除法,从大到小依次除下去,得到最终的结果。


具体实现的C++代码如下:

class Solution {
public:
    /**
     * @param n The integer
     * @return Roman representation
     */
    string intToRoman(int n) {
        // Write your code here
    map<int,string> m={{1000,"M"}, {900,"CM"}, {500,"D"}, {400,"CD"}, {100,"C"}, {90,"XC"}, {50,"L"}, 
    {40,"XL"}, {10,"X"}, {9,"IX"}, {5,"V"}, {4,"IV"}, {1,"I"}};
    map<int,string>::iterator it;
    it=m.end();
    it--;
    string res={""};
    while(n>0)
    {
        int temp=n/(it->first);
        n-=temp*(it->first);
        for(;temp>0;temp--)
        {
            res+=(it->second);
        }
        it--;
    }
    return res;
        
    }
};


代码中需要注意的事项:

1、平时没怎么用过map容器,在获取map里面的键值对的时候一般用到迭代器iterator;

2、要注意到map里面的键值对默认是按照键的从小到大排列,一开始没有注意到困扰了我一会,所以该题中的迭代器it要从最后一个数开始,即最大的数1000开始;

3、.end()用法指向的是容器的最后一个对象之后的位置,是一个不存在的对象,所以代码里面在it=m.end();后面加上了it--,使此时的it指向的是容器的最后一对键值对。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值