public String intToRoman(int num) {
int xyz = num;
char[] chars = {'I', 'V', 'X', 'L', 'C', 'D', 'M'};
int[] arr = {1, 5, 10, 50, 100, 500, 1000};
StringBuffer buffer = new StringBuffer();
int n = arr.length - 1;
while (n >= 0) {
if (xyz >= arr[n]) {
// xyz大于等于arr[n]
xyz -= arr[n];
buffer.append(chars[n]);
} else if (n - 2 >= 0 && n % 2 == 0 && xyz >= arr[n] - arr[n - 2]) {
// 9的倍数情况 1,10,100,1000
xyz = xyz - (arr[n] - arr[n - 2]);
buffer.append(chars[n - 2]);
buffer.append(chars[n]);
} else if (n - 1 >= 0 && n%2!=0&&xyz >= arr[n] - arr[n - 1]) {
// 4的倍数情况 5,50,500
xyz = xyz - (arr[n] - arr[n - 1]);
buffer.append(chars[n - 1]);
buffer.append(chars[n]);
}
if (xyz>=arr[n]||(n - 2 >= 0 && n % 2 == 0 && xyz >= arr[n] - arr[n - 2])||(n - 1 >= 0 && n%2!=0&&xyz >= arr[n] - arr[n - 1])) {
//剩余数还大于等于arr[n]-arr[n-1]
// arr[n] arr[n]-arr[n-2] 三种情况
//不作处理
} else {
//剩余数小于arr[n]-arr[n-1]
n--;
}
}
String str = buffer.toString();
return str;
}
p.s.欢迎指正