题目描述
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";
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。
代码示例
#include
#include
推荐学习C++的资料
C++标准函数库
在线C++API查询
map使用方法