给定一个整数,将其转为罗马数字。输入确保在1到3999的范围内。
罗马数字包含以下七种字符:I,V,X,L,C,D,M
I代表数值1
V代表数值5
X代表数值10
L代表数值50
C代表数值100
D代表数值500
M代表数值1000
通常情况,小的数字放在大的数字右边。但是有六种特殊的情况:
- I可以放在V和X左边,表示4和9
- X可以放在L和C的左边,表示40和90
- C可以放在D和M的左边,表示400和900
主要思想是贪心思想,需要从最大值遍历到最小值。也可以当作进制转换,从最大值转换到最小值。
提交代码
import java.util.*;
import static java.lang.Math.min;
public class leetcode {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
String str = intToRoman(num);
System.out.println(str);
}
public static String intToRoman(int num) {
//初始化
int[] Roman_num = {1,4,5,9,10,40,50,90,100,400,500,900,1000};
String[] Roman_str = {"I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"};
StringBuilder result = new StringBuilder();
//贪心算法
for(int i = 12; i>=0; i--) {
while(num >= Roman_num[i]) {
num = num - Roman_num[i];
result.append(Roman_str[i]);
}
}
retu