1. 程式人生 > 其它 >數字轉羅馬數字

數字轉羅馬數字

數字轉羅馬數字

關於羅馬數字

羅馬數字是位置計數嗎?它的缺點是什麼?

不是。位置計數法是指按位置制來計數的方法,即一個數的大小,用一組有順序的數字來表示,每個數字所代表的的大小,既取決於它本身的數值,又取決於它所在的位置。而羅馬計數中存在字元顛倒的情況,故羅馬計數不是位置計數。
現在我們不用羅馬計數是因為它的寫作較為複雜,不能直觀清楚的表示很大的數字,而且沒有表示零的符號。

關於學號轉換

我講自己的學號分成了兩個部分,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題解法