羅馬數字轉阿拉伯數字


羅馬數字轉阿拉伯數字

羅馬數字時位置記數法嗎?

根據《計算機科學概論》可以知道,位置記數法的概念為:

位置記數法(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值,返回到輸出值。接着就是人機互動的環節:輸入羅馬數字,根據輸入進行上述操作,以阿拉伯數字輸出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM