给定一个整数,任务是编写一个 Python 程序将整数转换为罗马数字。
例子:
Input:5 Output: V Input: 9 Output: IX Input: 40 Output: XL Input: 1904 Output: MCMIV
下表显示了罗马符号列表,包括它们对应的整数值:符号 值 I 1 IV   4 V 5 IX 9 X 10 XL 40 L 50 XC 90 C 100 CD 400 D 500 CM 900 M 1000 
想法是分别转换给定数字的单位、十、百、千位。如果数字为 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
相关用法
- Java Integer List转Integer Array用法及代码示例
- Java boolean转integer用法及代码示例
- Java String转Integer Array用法及代码示例
- Python Tuple转integer用法及代码示例
- Python string转integer用法及代码示例
- Python integer转string用法及代码示例
- Python string转integer用法及代码示例
- Python Integer Matrix转String Matrix用法及代码示例
- Python DateTime转integer用法及代码示例
- Javascript string转integer用法及代码示例
注:本文由纯净天空筛选整理自Kanchan_Ray大神的英文原创作品 Python program to convert integer to roman。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
