欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

罗马数字与阿拉伯数字转换

程序员文章站 2022-04-09 18:55:21
罗马数字与阿拉伯数字对应关系如下: 且“II”表示2,“III”表示3,“IV”表示4,“VI表示6”,“VII”表示7,“VIII”表示8,“IX”表示9,其余的类似。 阿拉伯数转换成罗马数字 罗马数字转换为阿拉伯数字: ......

罗马数字与阿拉伯数字对应关系如下:

罗马数字与阿拉伯数字转换

且“ii”表示2,“iii”表示3,“iv”表示4,“vi表示6”,“vii”表示7,“viii”表示8,“ix”表示9,其余的类似。

阿拉伯数转换成罗马数字

class solution(object):
    def inttoroman(self, num):
        """
        :type num: int
        :rtype: str
        """
        
        if not num:
            return ""
        out = ""
        i = 3
        while i >= 0:
            out += self.get_roman(i,num//(10**i))
            num %= (10**i)
            i -= 1      
        return out
    
    def get_roman(self,power,quotient):
        power_to_roman = {0:["i","v","x"],1:["x","l","c"],2:["c","d","m"],3:["m"]}
        romans = power_to_roman[power]
        if quotient <= 3:
            out = quotient*romans[0]
        elif quotient == 4:
            out = romans[0]+romans[1]
        elif quotient == 5:
            out = romans[1]
        elif quotient <= 8:
            out = romans[1]+(quotient-5)*romans[0]
        else:
            out = romans[0]+romans[2]
        return out

罗马数字转换为阿拉伯数字:

class solution(object):
    def romantoint(self, s):
        """
        :type s: str
        :rtype: int
        """
        if not s:
            return 0
        roman_to_num = {'i':1,"v":5,"x":10,"l":50,"c":100,"d":500,"m":1000}
        before = {"v":"i","x":"i","l":"x","c":"x","d":"c","m":"c"}
        
        stack = []
        num = 0
        i = len(s)-1
        while i >= 0:
            if not stack:
                stack.append(s[i])
            else:
                last = stack.pop()
                if last in before and s[i] == before[last]:
                    num += roman_to_num[last] - roman_to_num[s[i]]
                else:
                    stack.append(last)
                    stack.append(s[i])
            i -= 1
        for i in stack:
            num += roman_to_num[i]
        return num