Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
将给定的数字转换为罗马数字,范围为(1~3999)
罗马数字的组成规则自己网上找
思路:
观察可得罗马数字(1~3999)的组成分为4种类型,(1~9)(10~90)(100~900)(1000~3000),本质上讲其实构成规则是一样的,只是字母所代表的大小不同。然后以中间的罗马数字为基础,其他罗马数字放在左边表示减,右边表示加,来表示其数字大小,可发现,只要把给定的int数字进行分位,即千百十个位分开,再找到其对应的罗马数字,之后合并,就能得到该数字代表的罗马数字。
这里的做法是将int类型的数字转化为字符串类型,这样取位数比较简单,虽然可能效率会差点。
以下给出代码
public class Solution { public static final String[][] ROMANLIST = { {"","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"} }; public String intToRoman(int num) { if(num > 3999) return null; String numString = String.valueOf(num); String roman = ""; int digit = numString.length(); int digitNum = digit; int loc; while(digit != 0) { switch(digit) { case 4 : loc = numString.charAt(digitNum - digit) - '0'; roman = roman + ROMANLIST[3][loc]; break; case 3 : loc = numString.charAt(digitNum - digit) - '0'; roman = roman + ROMANLIST[2][loc]; break; case 2 : loc = numString.charAt(digitNum - digit) - '0'; roman = roman + ROMANLIST[1][loc]; break; case 1 : loc = numString.charAt(digitNum - digit) - '0'; roman = roman + ROMANLIST[0][loc]; break; default : return null; } digit--; } return roman; } }