如题
首先想到的是通过进制位去匹配
public static String change(int num) {
StringBuilder sb = new StringBuilder("");
int a = num / 1000;
int b = num % 1000;
int c = num % 100;
int d = num % 10;
for (int i = 0; i < a; i++) {// 千位处理
sb.append("M");
}
for (int i = b / 100; i > 0; i--) {// 百位处理
if (i==9) {
sb.append("CM");
i-=9;
}else if(i >= 5) {
sb.append("D");
i -= 4;
} else if (i == 4) {
sb.append("CD");
i -= 4;
} else {
sb.append("C");
}
}
for (int i = c / 10; i > 0; i--) {// 十位处理
if (i==9) {
sb.append("XC");
i-=9;
}else if(i >= 5) {
sb.append("L");
i -= 4;
} else if (i == 4) {
sb.append("XL");
i -= 4;
} else {
sb.append("X");
}
}
for (int i = d; i > 0; i--) {// 个位处理
if (i==9) {
sb.append("IX");
i-=9;
}else if(i >= 5) {
sb.append("V");
i -= 4;
} else if (i == 4) {
sb.append("IV");
i -= 4;
} else {
sb.append("I");
}
}
return sb.toString();
}
很笨的方法
换一种思路,不拘泥于进制了,通过分解因式来做
public static String change1(int num) {
StringBuilder sb =new StringBuilder("");
int [] is = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
String []ss= {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
int i =0;
while(num!=0) {
if(num>=is[i]) {
num-=is[i];
sb.append(ss[i]);
}else {
i++;
}
}
return sb.toString();
}
灵活很多了就
本文介绍了一种将阿拉伯数字转换为罗马数字的算法实现,通过两种不同的方法:逐位匹配和因式分解,展示了如何优雅地解决这个问题。逐位匹配方法按千、百、十、个位进行处理,而因式分解方法则更灵活,通过查找预定义的数值和罗马数字对应表来构建结果。
403

被折叠的 条评论
为什么被折叠?



