Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
翻译:整数转换为罗马数字(1-3999)
Code:
import java.util.*;
/**
* @author MohnSnow
* @time 2015年6月3日 下午1:42:40
* @title Integer to Roman
*/
public class LeetCode12 {
/**
* @param argsmengdx
* -fnst
*/
/*
* test:
* 个位数举例
* Ⅰ,1 】Ⅱ,2】 Ⅲ,3】 Ⅳ,4 】Ⅴ,5 】Ⅵ,6】Ⅶ,7】 Ⅷ,8 】Ⅸ,9 】
* 十位数举例
* Ⅹ,10】 Ⅺ,11 】Ⅻ,12】 XIII,13】 XIV,14】 XV,15 】XVI,16 】XVII,17 】XVIII,18】
* XIX,19】 XX,20】 XXI,21 】XXII,22 】XXIX,29】 XXX,30】 XXXIV,34】 XXXV,35 】
* XXXIX,39】 XL,40】 L,50 】LI,51】 LV,55】 LX,60】 LXV,65】 LXXX,80】 XC,90 】
* XCIII,93】 XCV,95 】XCVIII,98】 XCIX,99 】
* 百位数举例
* C,100】 CC,200 】CCC,300 】CD,400】 D,500 】DC,600 】DCC,700】 DCCC,800 】CM,900】
* CMXCIX,999】
* 千位数举例
* M,1000】 MC,1100 】MCD,1400 】MD,1500 】MDC,1600 】MDCLXVI,1666】 MDCCCLXXXVIII,1888 】
* MDCCCXCIX,1899 】MCM,1900 】MCMLXXVI,1976】 MCMLXXXIV,1984】
* MCMXC,1990 】MM,2000 】MMMCMXCIX,3999】
* 千位数以上举例
* ,65,259 】,134945584】, 183650】
*/
//348msA
public static String intToRoman(int num) {
if(num<1 || num > 3999){
return "";
}
int [] strInt = new int[4];
int i = 3;
while(num>9){
strInt[i--] = num%10;
num = num/10;
}
strInt[i]=num;
String[] roma = new String[4];
StringBuffer ret = new StringBuffer();
switch(strInt[0]){
case 0: roma[0]="";break;
case 1: roma[0]="M";break;
case 2: roma[0]="MM";break;
case 3: roma[0]="MMM";break;
default: break;
}
ret.append(roma[0]);
switch(strInt[1]){
case 0: roma[1]="";break;
case 1: roma[1]="C";break;
case 2: roma[1]="CC";break;
case 3: roma[1]="CCC";break;
case 4: roma[1]="CD";break;
case 5: roma[1]="D";break;
case 6: roma[1]="DC";break;
case 7: roma[1]="DCC";break;
case 8: roma[1]="DCCC";break;
case 9: roma[1]="CM";break;
default: break;
}
ret.append(roma[1]);
switch(strInt[2]){
case 0: roma[2]="";break;
case 1: roma[2]="X";break;
case 2: roma[2]="XX";break;
case 3: roma[2]="XXX";break;
case 4: roma[2]="XL";break;
case 5: roma[2]="L";break;
case 6: roma[2]="LX";break;
case 7: roma[2]="LXX";break;
case 8: roma[2]="LXXX";break;
case 9: roma[2]="XC";break;
default: break;
}
ret.append(roma[2]);
switch(strInt[3]){
case 0: roma[3]="";break;
case 1: roma[3]="I";break;
case 2: roma[3]="II";break;
case 3: roma[3]="III";break;
case 4: roma[3]="IV";break;
case 5: roma[3]="V";break;
case 6: roma[3]="VI";break;
case 7: roma[3]="VII";break;
case 8: roma[3]="VIII";break;
case 9: roma[3]="IX";break;
default: break;
}
ret.append(roma[3]);
return ret.toString();
}
//把特殊字符放到数组里面312msA
public static String intToRoman1(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" };
StringBuilder result = new StringBuilder();
for (int i = 0; i < values.length; i++) {
while (number >= values[i]) {
number -= values[i];
result.append(numerals[i]);
}
}
return result.toString();
}
public static void main(String[] args) {
int a = 1689;
System.out.println(a);
System.out.println(intToRoman(a));
System.out.println(intToRoman1(a));
}
}