-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path12 整数转罗马数字.txt
54 lines (42 loc) · 1.35 KB
/
12 整数转罗马数字.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/**
* 罗马数字总共有7种字符: I, V, X, L,C,D 和 M。
*
* 字符 数值
* I 1
* V 5
* X 10
* L 50
* C 100
* D 500
* M 1000
*
* 罗马数字2写作II。12写作XII。27写作XX + V + II。
* 通常情况下罗马数字大的在左边,小的在右边。但存在特例,有下面的6种情况:
*
* I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
* X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
* C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
*
* 题目:给定一个整数,将其转为罗马数字。输入却表在1-3999的范围内。
*/
public String intToRoman(int num) {
if(num<1 || num>3999) return "";
int[] a = new int[] {1000,500,100,50,10,5,1};
String[] b = new String[] {"M", "D", "C", "L", "X", "V", "I"};
String str = "";
for(int i=0; i<7; i += 2) {
int c = num / a[i];
if(c < 4) {
for(int j=0; j<c; j++) str += b[i];
}else if(c == 4) {
str = str + b[i] + b[i-1];
}else if(c >4 && c < 9) {
str=str+b[i-1];
for(int k=0; k<c-5; k++) str += b[i];
}else if(c == 9) {
str = str + b[i] + b[i-2];
}
num = num % a[i];
}
return str;
}