题目:
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
解法:此题关键是阅读罗马计数的规则,下面是维基百科给出的规则
其实,我们可以总结为:对于普通数字的每一位分别来表示!
对于百位上的数字,C,CC,CCC,CD,D,DC,DCC,DCCC,CM为1——9
对于十位上的数字,X,XX,XXX,XL,L,LX,LXX,LXXX,XC 为1——9
对于个位上的数字,I,II,III,IV,V,VI,VII,VIII,IX为1——9
观察知道仅在4,9这两个数上会出现减法(即左减模式),因此对于每一位都在10,9,5,4上加以区分。
public class No12_IntegerToRoman {
public static void main(String[] args){
System.out.println(intToRoman(2794));
}
public static String intToRoman(int num) {
String ret = "";
while(num != 0){
if(num >= 1000){
num -= 1000;
ret += "M";
continue;
}
if(num >= 900){
num -= 900;
ret += "CM";
continue;
}
if(num >= 500){
num -= 500;
ret += "D";
continue;
}
if(num >= 400){
num -= 400;
ret += "CD";
continue;
}
if(num >= 100){
num -= 100;
ret += "C";
continue;
}
if(num >= 90){
num -= 90;
ret += "XC";
continue;
}
if(num >= 50){
num -= 50;
ret += "L";
continue;
}
if(num >= 40){
num -= 40;
ret += "XL";
continue;
}
if(num >= 10){
num -= 10;
ret += "X";
continue;
}
if(num >= 9){
num -= 9;
ret += "IX";
continue;
}
if(num >= 5){
num -= 5;
ret += "V";
continue;
}
if(num >= 4){
num -= 4;
ret += "IV";
continue;
}
if(num >= 1){
num -= 1;
ret += "I";
continue;
}
}
return ret;
}
}