罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 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。
给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。
示例 1:
输入: 3 输出: "III"
示例 2:
输入: 4 输出: "IV"
示例 3:
输入: 9 输出: "IX"
示例 4:
输入: 58 输出: "LVIII" 解释: L = 50, V = 5, III = 3.
示例 5:
输入: 1994 输出: "MCMXCIV" 解释: M = 1000, CM = 900, XC = 90, IV = 4.
1 char* intToRoman(int num) {
2 if (num <1 && num >3999) return NULL;
3
4 char* ge[] = { "I","II","III","IV","V","VI","VII","VIII","IX" };
5 char* shi[] = { "X","XX","XXX","XL","L","LX","LXX","LXXX","XC" };
6 char* bai[] = { "C","CC","CCC","CD","D","DC","DCC","DCCC","CM" };
7 char* qian[] = { "M","MM","MMM" };
8 int figures = 1, remainder = 0;
9 char * ge1=NULL, *shi1=NULL, *bai1=NULL, *qian1=NULL;
10
11 char * roman_char = (char *)malloc(sizeof(char) * 1);
12 *roman_char = '\0';
13 /*
14 for ( int j = 0; j<15;j++){
15 roman_char[j] ='\0';
16 }
17 */
18 // #define MAX 12
19 while (num != 0) {
20 remainder = num % 10;
21 num = num / 10;
22 switch (figures)
23 {
24 case 1://个位数
25 if (remainder == 0) {
26 ge1 = NULL;
27 break;
28 }
29 ge1 = ge[remainder - 1];
30 break;
31 case 2:
32 if (remainder == 0) {
33 shi1 = NULL;
34 break;
35 }
36 shi1 = shi[remainder - 1];
37 break;
38 case 3:
39 if (remainder == 0) {
40 bai1 = NULL;
41 break;
42 }
43 bai1 = bai[remainder - 1];
44 break;
45 case 4:
46 if (remainder == 0) {
47 qian1 == NULL;
48 break;
49 }
50 qian1 = qian[remainder - 1];
51 break;
52 default:
53 break;
54 }
55 figures++;
56 }
57 int lenth = 0;
58 if (qian1 != NULL) {
59 lenth += strlen(qian1);
60 roman_char = realloc(roman_char, lenth);
61
62 strcat(roman_char, qian1);
63 }
64 if (bai1 != NULL) {
65 lenth += strlen(bai1);
66 roman_char = realloc(roman_char, lenth);
67 strcat(roman_char, bai1);
68
69 }
70 if (shi1 != NULL) {
71 lenth += strlen(shi1);
72 roman_char = realloc(roman_char, lenth);
73 strcat(roman_char, shi1);
74 }
75 if (ge1 != NULL) {
76 lenth += strlen(ge1);
77 roman_char = realloc(roman_char, lenth);
78 strcat(roman_char, ge1);
79 }
80
81 return roman_char;
82
83 }
来源:https://www.cnblogs.com/micoblog/p/10020414.html