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;
}
备注: