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;
}
}