数字转罗马数字
数字转罗马数字
关于罗马数字
罗马数字是位置计数吗?它的缺点是什么?
不是。位置计数法是指按位置制来计数的方法,即一个数的大小,用一组有顺序的数字来表示,每个数字所代表的的大小,既取决于它本身的数值,又取决于它所在的位置。而罗马计数中存在字符颠倒的情况,故罗马计数不是位置计数。
现在我们不用罗马计数是因为它的写作较为复杂,不能直观清楚的表示很大的数字,而且没有表示零的符号。
关于学号转换
我讲自己的学号分成了两个部分,2021和1423,分别用罗马数字表示为MMXXI MCDXXIII,经验证后正确。
关于python编写相关代码
def transform_alabo2(one_num):
num_list = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
str_list = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"]
res = ''
for i in range(len(num_list)):
while one_num >= num_list[i]:
one_num -= num_list[i]
res += str_list[i]
return res
def transform_roman(one_str):
define_dict = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
if one_str == '0':
return 0
else:
res = 0
for i in range(0, len(one_str)):
if i == 0 or define_dict[one_str[i]] <= define_dict[one_str[i - 1]]:
res += define_dict[one_str[i]]
else:
res += define_dict[one_str[i]] - 2 * define_dict[one_str[i - 1]]
return res
if __name__ == '__main__':
print('***将阿拉伯数字转化为罗马数字***')
one_num = int(input("go:"))
print(one_num, '----->', transform_alabo2(one_num))
print('***将罗马数字转化为阿拉伯数字***')
one_str = str(input("请输入一个罗马数:"))
print(one_str, '----->', transform_roman(one_str))
参考https://www.jb51.net/article/138306.htm
还有一个代码,但是自己对类函数的使用还不够清楚,运行不起来。
class Solution:
def inTORoman(self, num: int) -> str:
cache = {
1000: 'M',
900: 'CM',
500: 'D',
400: 'CD',
100: 'C',
90: 'XC',
50: 'L',
40: 'XL',
10: 'X',
9: 'IX',
5: 'V',
4: 'IV',
1: 'I',
}
res = ""
for i in cache:
count = num//i
if count:
res += count*cache[i]
num %= i
return res
参考力扣12题解法