数字转罗马数字

数字转罗马数字

关于罗马数字

罗马数字是位置计数吗?它的缺点是什么?

不是。位置计数法是指按位置制来计数的方法,即一个数的大小,用一组有顺序的数字来表示,每个数字所代表的的大小,既取决于它本身的数值,又取决于它所在的位置。而罗马计数中存在字符颠倒的情况,故罗马计数不是位置计数。
现在我们不用罗马计数是因为它的写作较为复杂,不能直观清楚的表示很大的数字,而且没有表示零的符号。

关于学号转换

我讲自己的学号分成了两个部分,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题解法

posted @ 2021-10-17 14:10  20211423袁艺  阅读(142)  评论(0编辑  收藏  举报