整数转罗马数字
1,程序简介
-
罗马数字包含以下七种字符: 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:
- 输入: num = 3
- 输出: “III”
示例 2:
-
输入: num = 4
-
输出: “IV”
示例 3:
-
输入: num = 9
-
输出: “IX”
示例 4:
-
输入: num = 58
-
输出: “LVIII”
-
解释: L = 50, V = 5, III = 3.
示例 5:
-
输入: num = 1994
-
输出: “MCMXCIV”
-
解释: M = 1000, CM = 900, XC = 90, IV = 4.
提示:
- 1 <= num <= 3999
以下程序实现了这一功能,请你填补空白处内容:
struct rmap
{
char *r;
int v;
} units[] = {
{"M", 1000},
{"CM", 900},
{"D", 500},
{"CD", 400},
{"C", 100},
{"XC", 90},
{"L", 50},
{"XL", 40},
{"X", 10},
{"IX", 9},
{"V", 5},
{"IV", 4},
{"I", 1}};
#include <string.h>
char result[64];
char *intToRoman(int num)
{
result[0] = 0;
int ri = 0;
int i = 0;
while (num)
{
______________
else
{
i++;
}
}
return result;
}
2,程序代码
# -*- coding: utf-8 -*-
"""
Created on Fri Dec 10 18:52:20 2021
Function:
@author: 小梁aixj
"""
from math import floor
class Solution:
def intToRoman(self, num: int) -> str:
f = 1000
f2 = 1000
sym = ['M', 'D', 'C', 'L', 'X', 'V', 'I']
fsi = 0
s = [2, 5]
si = 0
s2 = [10, 1]
si2 = 0
roman = []
while num > 0:
d = floor(num/f)
r = num % f
d2 = floor(num/f2)
r2 = num % f2
if d > 0:
if d == 4:
roman.append(sym[fsi])
roman.append(sym[fsi-1])
num = r
elif d2 == 9:
roman.append(sym[fsi+1])
roman.append(sym[fsi-1])
num = r2
else:
i = 0
while i < d:
roman.append(sym[fsi])
i += 1
num = r
f = f/s[si]
si += 1
si %= 2
f2 = f2/s2[si2]
si2 += 1
si2 %= 2
fsi += 1
return ''.join(roman)
# %%
s = Solution()
print(s.intToRoman(num = 3))
print(s.intToRoman(num = 4))
print(s.intToRoman(num = 9))
print(s.intToRoman(num = 58))
print(s.intToRoman(num = 1994))