當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python integer轉roman用法及代碼示例


給定一個整數,任務是編寫一個 Python 程序將整數轉換為羅馬數字。

例子:

Input:5
Output: V

Input: 9
Output: IX

Input: 40
Output: XL

Input:  1904
Output: MCMIV

下表顯示了羅馬符號列表,包括它們對應的整數值:

符號
I1
IV  4
V5
IX9
X10
XL40
L50
XC90
C100
CD400
D500
CM900
M1000

想法是分別轉換給定數字的單位、十、百、千位。如果數字為 0,則沒有對應的羅馬數字符號。數字 4 和 9 的轉換與其他數字有點不同,因為這些數字遵循減法表示法。

將整數值轉換為羅馬數字的算法

將給定數字與基值按 1000、900、500、400、100、90、50、40、10、9、5、4、1 的順序進行比較。小於或等於給定數字的基值將是初始基值(最大基值),將該數除以其最大基值,對應的基符號將重複商次,餘數將成為以後除法和重複的數。將重複該過程,直到數字變為零。

方法一:

  • 最初 number = 3549,從 3549 >= 1000 開始;最初的最大基值為 1000。並除以 3549/1000。商 = 3,餘數 = 549。相應的符號 M 將重複三次。
  • 現在,數字變為 549 並且 1000 > 549 >= 500,最大基值為 500 然後除以 549/500。商 = 1,餘數 = 49。對應的符號 D 將重複一次。
  • 現在,數字 = 49 和 50 > 49 >= 40,最大基值為 40。然後除以 49/40。商 = 1,餘數 = 9。對應的符號 XL 將重複一次。
  • 現在,數字 = 9 和 10> 9 >= 9,最大基值為 9。然後除以 9/9。商 = 1,餘數 = 0。對應的符號 IX 將重複一次。
  • 最後,數字變為0,算法到此停止。輸出得到 MMMDXLIX。

下麵的例子展示了上述算法的實現:

Python3


# Python3 program to convert
# integer value to roman values
  
# Function to convert integer to Roman values
def printRoman(number):
    num = [1, 4, 5, 9, 10, 40, 50, 90,
        100, 400, 500, 900, 1000]
    sym = ["I", "IV", "V", "IX", "X", "XL",
        "L", "XC", "C", "CD", "D", "CM", "M"]
    i = 12
      
    while number:
        div = number // num[i]
        number %= num[i]
  
        while div:
            print(sym[i], end = "")
            div -= 1
        i -= 1
  
# Driver code
if __name__ == "__main__":
    number = 3549
    print("Roman value is:", end = " ")
    printRoman(number)

輸出:

Roman value is:MMMDXLIX

方法二:

在這種方法中,我們首先要觀察問題。問題陳述中給出的數字最多可以是 4 位數字。解決這個問題的思路是:

  • 將給定的數字分成不同位置的數字,例如一、二、百或千。
  • 從千位開始打印相應的羅馬值。例如,如果千位的數字是 3,則打印相當於 3000 的羅馬數字。
  • 重複第二步,直到我們到達一個位置。

假設輸入數字是 3549。所以,從千位開始,我們將開始打印對應的羅馬數字。在這種情況下,我們將按以下順序打印:

  • 相當於 3000 的羅馬數字
  • 相當於500的羅馬
  • 羅馬相當於40
  • 相當於羅馬的 9

所以,輸出將是:MMMDXLIX

下麵的例子展示了上述方法的實現:

Python3


# Python3 program for above approach
  
# Function to calculate Roman values
def intToRoman(num):
  
    # Storing roman values of digits from 0-9
    # when placed at different places
    m = ["", "M", "MM", "MMM"]
    c = ["", "C", "CC", "CCC", "CD", "D",
         "DC", "DCC", "DCCC", "CM "]
    x = ["", "X", "XX", "XXX", "XL", "L",
         "LX", "LXX", "LXXX", "XC"]
    i = ["", "I", "II", "III", "IV", "V",
         "VI", "VII", "VIII", "IX"]
  
    # Converting to roman
    thousands = m[num // 1000]
    hundreds = c[(num % 1000) // 100]
    tens = x[(num % 100) // 10]
    ones = i[num % 10]
  
    ans = (thousands + hundreds +
           tens + ones)
  
    return ans
  
# Driver code
if __name__ == "__main__":
    number = 3549
    print(intToRoman(number))

輸出:

MMMDXLIX

方法三:

在這種方法中,我們考慮數字中的主要有效數字。例如:在 1234 中,主要有效數字為 1。類似地,在 345 中為 3。為了提取主要有效數字,我們需要為 1234 維護一個除數(我們稱之為 div),例如 1000(因為 1234 /1000 = 1) 和 100 表示 345 (345 /100 = 3)。另外,讓我們維護一個名為羅馬數字的字典 = {1:'I', 5:'V', 10:'X', 50:'L', 100:'C', 500:'D', 1000:' M'}

下麵的例子展示了上述算法的實現:

Python3


# Python 3 program to convert integer
# number to Roman values
import math
  
def integerToRoman(A):
    romansDict = \
        {
            1:"I",
            5:"V",
            10:"X",
            50:"L",
            100:"C",
            500:"D",
            1000:"M",
            5000:"G",
            10000:"H"
        }
  
    div = 1
    while A >= div:
        div *= 10
  
    div /= 10
  
    res = ""
  
    while A:
  
        # main significant digit extracted
        # into lastNum
        lastNum = int(A / div)
  
        if lastNum <= 3:
            res += (romansDict[div] * lastNum)
        elif lastNum == 4:
            res += (romansDict[div] +
                        romansDict[div * 5])
        elif 5 <= lastNum <= 8:
            res += (romansDict[div * 5] +
            (romansDict[div] * (lastNum - 5)))
        elif lastNum == 9:
            res += (romansDict[div] +
                        romansDict[div * 10])
  
        A = math.floor(A % div)
        div /= 10
          
    return res
  
# Driver code
print("Roman value for the integer is:"
                + str(integerToRoman(3549)))

輸出:

Roman value for the integer is:MMMDXLIX

相關用法


注:本文由純淨天空篩選整理自Kanchan_Ray大神的英文原創作品 Python program to convert integer to roman。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。