羅馬數字轉阿拉伯數字
羅馬數字時位置記數法嗎?
根據《計算機科學概論》可以知道,位置記數法的概念為:
位置記數法(positional notation):一種表達數字的系統,數位按順序排列,每個數位有一個位值,數字的值是每個數位和位值的乘積之和。
又根據羅馬數字轉換阿拉伯數字0~3999,關於羅馬數字的一些概念:
有兩條須注意掌握:
1.基本數字 Ⅰ、X 、C 中的任何一個、自身連用構成數目、或者放在大數的右邊連用構成數目、都不能超過三個;放在大數的左邊只能用一個;
2.不能把基本數字 V 、L 、D 中的任何一個作為小數放在大數的左邊采用相減的方法構成數目;放在大數的右邊采用相加的方式構成數目、只能使用一個;
相同的數字連寫、所表示的數等於這些數字相加得到的數、如:Ⅲ=3;
小的數字在大的數字的右邊、所表示的數等於這些數字相加得到的數、 如:Ⅷ=8、Ⅻ=12;
小的數字(限於 I、X 和 C)在大的數字的左邊、所表示的數等於大數減小數得到的數、如:Ⅳ=4、Ⅸ=9;
正常使用時、連寫的數字重復不得超過三次;
在一個數的上面畫一條橫線、表示這個數擴大 1000 倍。
很明顯,羅馬數字根本不是位置記數法。比如數字III,是無法根據它的數位和位值的乘積算出來等於3的。
將八位學號轉換成羅馬數字
從鏈接中可知,十進制數字的范圍是0~3999,但是我的學號是八位,該如何轉換?
通過交流,發現:
- 十進制數字的范圍是0~3999,最高四位數
- 我們的學號是八位數
- 分割成四位 四位兩端,每一段均在這個范圍之內
因此,決定將學號分成兩個部分,四位四位一轉換。
我的學號是20211408,即 2021和1408,其中:
- 2021轉換成羅馬數字為MMXXI
- 1408轉換成羅馬數字為MCDVIII
即:我的學號2021 1408 轉換為羅馬數字為MMXXI MCDVIII
然而,我發現一個算不上是問題的問題:
按照2021 1408進行分段,前者很正確,但是后者並非如此,說到底,我這個學號的含義是2021年入學,在1系4班,8號,本質上,我是8號,而不是1408號,因此我又試着將1408分為1、4和08進行轉換
- 1轉換成羅馬數字為I
- 4轉換為羅馬數字為IV
- 08轉換成羅馬數字為VIII
即:此時我的學號轉換為羅馬數字是MMXXI I IV VIII
這樣,能一眼看出我是於2021年入學,在1系4班,學號為8號
這純粹是我的個人看法
當然,這樣子分法數字轉化就很簡單了……
用python編寫一個羅馬數字轉化為阿拉伯數字的程序
借鑒了蠻多網上的資料的,比如:
https://www.jb51.net/article/138306.htm
https://www.cnpython.com/qa/566044
https://www.cnblogs.com/qiuyuyu/p/9755608.html
最后上傳至碼雲:
羅馬數字轉阿拉伯數字
羅馬數字轉阿拉伯數字(另)
對代碼原理嘗試進行了理解,首先定義了函數,函數名稱隨意,意圖在於通過函數實現羅馬數字向阿拉伯數字的轉換,接着定義了字典,根據羅馬數字與阿拉伯數字的對應關系進行梳理,然后如果str是0這個字符,那么回到初始值即0;否則的話初始值定為0,進入for循環,當變量i從索引0到索引“str字符長度”的時候,如果i滿足等於0或者i變量對應的函數值與i-1的函數值比大小,如果大於,則res疊加一個i的函數,否則i函數-2個i-1的函數,最后return所得res值,返回到輸出值。接着就是人機互動的環節:輸入羅馬數字,根據輸入進行上述操作,以阿拉伯數字輸出。