罗马数字包含以下七种字符: 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