描述
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。 X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/integer-to-roman 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
之前做过一个罗马数字转整数,当时简单的想法就是遍历字符串,用switch进行选择,后来看到有个简单的用map的做法 这个题是整数转罗马数,但是与罗马数串相比,整数有太多的可能性,所以我就用了最简单,也是最容易懂得方法:if语句 1、个位数的处理,十位数的处理,百位数的处理,千位数的处理 2、因为规定了最大是3999,所以就好做多了 3、这个方法虽然简单,但是还是可以进行很多优化的,比如这三种方法可以合并成一种,然后根据是几位数来进行罗马数字的选择,但是我懒得写了
代码
public static String
intToRoman(int num
) {
StringBuilder str
= new StringBuilder();
String s
= String
.valueOf(num
);
int len
= s
.length();
for (int i
= len
- 1; i
>= 0; i
--) {
int n
= Integer
.parseInt(String
.valueOf(s
.charAt(len
- 1 - i
)));
if (i
== 0) {
String one
= One(n
);
str
.append(one
);
}
if (i
== 1) {
String ten
= Ten(n
);
str
.append(ten
);
}
if (i
== 2) {
String hundred
= Hundred(n
);
str
.append(hundred
);
}
if (i
== 3) {
String thousand
= Thousand(n
);
str
.append(thousand
);
}
}
return String
.valueOf(str
);
}
public static String
One(int n
) {
StringBuilder str
= new StringBuilder();
if (n
< 5) {
if (n
== 4) {
return "IV";
} else {
for (int i
= 0; i
< n
; i
++) {
str
.append("I");
}
}
} else {
if (n
== 9) {
return "IX";
} else {
str
.append("V");
for (int i
= 5; i
< n
; i
++) {
str
.append("I");
}
}
}
return String
.valueOf(str
);
}
public static String
Ten(int n
) {
StringBuilder str
= new StringBuilder();
if (n
< 5) {
if (n
== 4) {
return "XL";
} else {
for (int i
= 0; i
< n
; i
++) {
str
.append("X");
}
}
} else {
if (n
== 9) {
return "XC";
} else {
str
.append("L");
for (int i
= 5; i
< n
; i
++) {
str
.append("X");
}
}
}
return String
.valueOf(str
);
}
public static String
Hundred(int n
) {
StringBuilder str
= new StringBuilder();
if (n
< 5) {
if (n
== 4) {
return "CD";
} else {
for (int i
= 0; i
< n
; i
++) {
str
.append("C");
}
}
} else {
if (n
== 9) {
return "CM";
} else {
str
.append("D");
for (int i
= 5; i
< n
; i
++) {
str
.append("C");
}
}
}
return String
.valueOf(str
);
}
public static String
Thousand(int n
) {
StringBuilder str
= new StringBuilder();
for (int i
= 0; i
< n
; i
++) {
str
.append("M");
}
return String
.valueOf(str
);
}