【LeetCode】Integer to Roman

来源:互联网 发布:手机3d软件 编辑:程序博客网 时间:2024/06/16 05:07

题目描述

Integer to Roman

 

Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.


题目分析

就是给出一个整数,求出罗马数字的表达示。
思路不难,做一个映射表,
mp[1] = "I";    mp[5] = "V";
        mp[10] = "X";   mp[50] = "L";
        mp[100] = "C";   mp[500] = "D";
        mp[1000] = "M";
整数后面往前判断,并记录进行到哪一位。
while(num)        {        tmp = num%10;        switch(tmp)        {        case 0:       break;       case 1:case 2:case 3:       while(tmp--)ret = mp[cmpnum] + ret;       break;              case 4:case 9:       ret = mp[(tmp+1)*cmpnum] + ret;       ret = mp[cmpnum] + ret;       break;              case 5:       ret = mp[cmpnum*5] + ret;       break;  case 6:case 7:case 8:  while((tmp--)-5)ret = mp[cmpnum] + ret;  ret = mp[cmpnum*5] + ret;    break; }cmpnum *= 10;num = num/10;}


如:3654
开始,记录一个cmpnum = 1,表示进行到个位
3654%10 = 4;
对于4,我们在结果前加一个mp[cmpnum*5]对应的值,再添加一个mp[cmpnum]代表的值,添加一个IV,此时结果是IV


循环下一次365%10=5,cmpnum = 10
对于5,我们在结果前加一个mp[cmpnum*5]对应的值就行,添加一个L,此时结果是LIV

循环下一次36%10=6,cmpnum = 100
对于6,我们在结果前加一个mp[cmpnum]对应的值,再添加一个mp[cmpnum]*5代表的值,添加一个DC,此时结果是DCLIV

循环下一次3%10=3,cmpnum = 1000
判断3,根据上面的条件,我们在结果里添加三次mp[cmpnum]代表的值就是MMM,此时结果是MMMDCLIV。

代码示例




推荐学习C++的资料

C++标准函数库
http://download.csdn.net/detail/chinasnowwolf/7108919
在线C++API查询
http://www.cplusplus.com/
map使用方法
http://www.cplusplus.com/reference/map/map/


0 0
原创粉丝点击