Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
本题思路比较简单,难度主要集中在罗马数字本身,直接贴代码。
思路一,从高位开始:
JAVA:
static public String intToRoman(int number) { int[] values = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }; String[] numerals = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X","IX", "V", "IV", "I" }; //不推荐用String类型,因为+的本质是建立StringBuilder()的过程 StringBuilder result = new StringBuilder(); for (int i = 0; i < values.length; i++) { while (number >= values[i]) { number -= values[i]; result.append(numerals[i]); } } return new String(result); }
C++:
1 class Solution { 2 public: 3 string intToRoman(int num) { 4 vector<int> values = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }; 5 string numerals[] = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X","IX", "V", "IV","I" }; 6 string res; 7 for (int i = 0; i < values.size(); i++) 8 while (num >= values[i]) { 9 num -= values[i]; 10 res+=numerals[i]; 11 } 12 return res; 13 } 14 };
思路二,从低位开始:
JAVA:
static public String intToRoman(int num) { String Roman[][] = { {"", "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"} }; StringBuilder result = new StringBuilder(); for(int i=0;i<Roman.length;i++,num/=10) result.insert(0,Roman[i][num % 10]); return new String(result); }