數字轉羅馬數字
阿新 • • 發佈:2021-10-17
數字轉羅馬數字
關於羅馬數字
羅馬數字是位置計數嗎?它的缺點是什麼?
不是。位置計數法是指按位置制來計數的方法,即一個數的大小,用一組有順序的數字來表示,每個數字所代表的的大小,既取決於它本身的數值,又取決於它所在的位置。而羅馬計數中存在字元顛倒的情況,故羅馬計數不是位置計數。
現在我們不用羅馬計數是因為它的寫作較為複雜,不能直觀清楚的表示很大的數字,而且沒有表示零的符號。
關於學號轉換
我講自己的學號分成了兩個部分,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題解法