每一位的处理都是一样的逻辑,换了两个字母而已,遇到4、9特殊处理一下即可
class Solution {
public static String intToRoman(int num) {
String s = num + "";
StringBuilder sb = new StringBuilder();
if (s.length() == 4) {
sb.append(intToRomanFour(num / 1000));
sb.append(intToRomanThree((num / 100) % 10));
sb.append(intToRomanTwo((num / 10) % 10));
sb.append(intToRomanOne(num % 10));
} else if (s.length() == 3) {
sb.append(intToRomanThree((num / 100) % 10));
sb.append(intToRomanTwo((num / 10) % 10));
sb.append(intToRomanOne(num % 10));
} else if (s.length() == 2) {
sb.append(intToRomanTwo((num / 10) % 10));
sb.append(intToRomanOne(num % 10));
} else {
sb.append(intToRomanOne(num % 10));
}
return sb.toString();
}
public static String intToRomanFour(int num) {
if (num == 0) {
return "";
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < num; i++) {
sb.append('M');
}
return sb.toString();
}
public static String intToRomanThree(int num) {
if (num == 0) {
return "";
}
StringBuilder sb = new StringBuilder();
if (num < 4) {
for (int i = 0; i < num; i++) {
sb.append('C');
}
} else if (num < 6) {
for (int i = num; i < 5; i++) {
sb.append('C');
}
sb.append('D');
} else if (num < 9) {
sb.append('D');
for (int i = num; i > 5; i--) {
sb.append('C');
}
} else {
sb.append("CM");
}
return sb.toString();
}
public static String intToRomanTwo(int num) {
if (num == 0) {
return "";
}
StringBuilder sb = new StringBuilder();
if (num < 4) {
for (int i = 0; i < num; i++) {
sb.append('X');
}
} else if (num < 6) {
for (int i = num; i < 5; i++) {
sb.append('X');
}
sb.append('L');
} else if (num < 9) {
sb.append('L');
for (int i = num; i > 5; i--) {
sb.append('X');
}
} else {
sb.append("XC");
}
return sb.toString();
}
public static String intToRomanOne(int num) {
if (num == 0) {
return "";
}
StringBuilder sb = new StringBuilder();
if (num < 4) {
for (int i = 0; i < num; i++) {
sb.append('I');
}
} else if (num < 6) {
for (int i = num; i < 5; i++) {
sb.append('I');
}
sb.append('V');
} else if (num < 9) {
sb.append('V');
for (int i = num; i > 5; i--) {
sb.append('I');
}
} else {
sb.append("IX");
}
return sb.toString();
}
}