数字转罗马数字

继上一篇写的,又看到了一个比较简洁的方法:

class Solution {
public:
    string intToRoman(int num) {
        int values[]={1000,900,500,400,100,90,50,40,10,9,5,4,1};
        string reps[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
        
        string res;
        for(int i=0; i<13; i++){
            while(num>=values[i]){
                num -= values[i];
                res += reps[i];
            }
        }
        return res;
    }
};

再贴一个大哥写的:

class Solution:
    def intToRoman(self, num: int) -> str:
        s=str(num)
        if num<4:
            return 'I'*num
        elif num==4:
            return 'IV'
        elif num<9:
            return 'V'+'I'*(num-5)
        elif num==9:
            return 'IX'
        #<39
        elif num<40:
            if s[1]=='4':
                return 'X'*(num//10)+'IV'
            elif s[1]=='9':
                return 'X'*(num//10)+'IX'
            elif int(s[1])<4:
                return 'X'*(num//10)+'I'*(int(s[1]))
            elif int(s[1])<9:
                return 'X'*(num//10)+'V'+'I'*(int(s[1])-5)
        #40-49
        elif num<50:
            if s[1]=='4':
                return 'XL'+'IV'
            elif s[1]=='9':
                return 'XL'+'IX'
            elif int(s[1])<4:
                return 'XL'+'I'*(int(s[1]))
            elif int(s[1])<9:
                return 'XL'+'V'+'I'*(int(s[1])-5)
        #50-89
        elif num<90:
            if s[1]=='4':
                return 'L'+'X'*((num-50)//10)+'IV'
            elif s[1]=='9':
                return 'L'+'X'*((num-50)//10)+'IX'
            elif int(s[1])<4:
                return 'L'+'X'*((num-50)//10)+'I'*(int(s[1]))
            elif int(s[1])<9:
                return 'L'+'X'*((num-50)//10)+'V'+'I'*(int(s[1])-5)
        #90-99
        elif num<100:
            if s[1]=='4':
                return 'XC'+'IV'
            elif s[1]=='9':
                return 'XC'+'IX'
            elif int(s[1])<4:
                return 'XC'+'I'*(int(s[1]))
            elif int(s[1])<9:
                return 'XC'+'V'+'I'*(int(s[1])-5)
        #100-399
        elif num<400:
            if s[1]=='4':
                if s[2]=='4':
                    return 'C'*(num//100)+'XL'+'IV'
                elif s[2]=='9':
                    return 'C'*(num//100)+'XL'+'IX'
                elif int(s[2])<4:
                    return 'C'*(num//100)+'XL'+'I'*int(s[2])
                else:
                    return 'C'*(num//100)+'XL'+'V'+'I'*(int(s[2])-5)
            elif s[1]=='9':
                if s[2]=='4':
                    return 'C'*(num//100)+'XC'+'IV'
                elif s[2]=='9':
                    return 'C'*(num//100)+'XC'+'IX'
                elif int(s[2])<4:
                    return 'C'*(num//100)+'XC'+'I'*int(s[2])
                else:
                    return 'C'*(num//100)+'XC'+'V'+'I'*(int(s[2])-5)
            elif int(s[1])<4:
                if s[2]=='4':
                    return 'C'*(num//100)+'X'*(int(s[1]))+'IV'
                elif s[2]=='9':
                    return 'C'*(num//100)+'X'*(int(s[1]))+'IX'
                elif int(s[2])<4:
                    return 'C'*(num//100)+'X'*(int(s[1]))+'I'*int(s[2])
                else:
                    return 'C'*(num//100)+'X'*(int(s[1]))+'V'+'I'*(int(s[2])-5)    
            else:
                if s[2]=='4':
                    return 'C'*(num//100)+'L'+'X'*(int(s[1])-5)+'IV'
                elif s[2]=='9':
                    return 'C'*(num//100)+'L'+'X'*(int(s[1])-5)+'IX'
                elif int(s[2])<4:
                    return 'C'*(num//100)+'L'+'X'*(int(s[1])-5)+'I'*int(s[2])
                else:
                    return 'C'*(num//100)+'L'+'X'*(int(s[1])-5)+'V'+'I'*(int(s[2])-5)
        #400-499
        elif num<500:
            if s[1]=='4':
                if s[2]=='4':
                    return 'CD'+'XL'+'IV'
                elif s[2]=='9':
                    return 'CD'+'XL'+'IX'
                elif int(s[2])<4:
                    return 'CD'+'XL'+'I'*int(s[2])
                else:
                    return 'CD'+'XL'+'V'+'I'*(int(s[2])-5)
            elif s[1]=='9':
                if s[2]=='4':
                    return 'CD'+'XC'+'IV'
                elif s[2]=='9':
                    return 'CD'+'XC'+'IX'
                elif int(s[2])<4:
                    return 'CD'+'XC'+'I'*int(s[2])
                else:
                    return 'CD'+'XC'+'V'+'I'*(int(s[2])-5)
            elif int(s[1])<4:
                if s[2]=='4':
                    return 'CD'+'X'*(int(s[1]))+'IV'
                elif s[2]=='9':
                    return 'CD'+'X'*(int(s[1]))+'IX'
                elif int(s[2])<4:
                    return 'CD'+'X'*(int(s[1]))+'I'*int(s[2])
                else:
                    return 'CD'+'X'*(int(s[1]))+'V'+'I'*(int(s[2])-5)    
            else:
                if s[2]=='4':
                    return 'CD'+'L'+'X'*(int(s[1])-5)+'IV'
                elif s[2]=='9':
                    return 'CD'+'L'+'X'*(int(s[1])-5)+'IX'
                elif int(s[2])<4:
                    return 'CD'+'L'+'X'*(int(s[1])-5)+'I'*int(s[2])
                else:
                    return 'CD'+'L'+'X'*(int(s[1])-5)+'V'+'I'*(int(s[2])-5)
        # 500-899
        elif num<900:
            if s[1]=='4':
                if s[2]=='4':
                    return 'D'*(num//500)+'C'*((num-500)//100)+'XL'+'IV'
                elif s[2]=='9':
                    return 'D'*(num//500)+'C'*((num-500)//100)+'XL'+'IX'
                elif int(s[2])<4:
                    return 'D'*(num//500)+'C'*((num-500)//100)+'XL'+'I'*int(s[2])
                else:
                    return 'D'*(num//500)+'C'*((num-500)//100)+'XL'+'V'+'I'*(int(s[2])-5)
            elif s[1]=='9':
                if s[2]=='4':
                    return 'D'*(num//500)+'C'*((num-500)//100)+'XC'+'IV'
                elif s[2]=='9':
                    return 'D'*(num//500)+'C'*((num-500)//100)+'XC'+'IX'
                elif int(s[2])<4:
                    return 'D'*(num//500)+'C'*((num-500)//100)+'XC'+'I'*int(s[2])
                else:
                    return 'D'*(num//500)+'C'*((num-500)//100)+'XC'+'V'+'I'*(int(s[2])-5)
            elif int(s[1])<4:
                if s[2]=='4':
                    return 'D'*(num//500)+'C'*((num-500)//100)+'X'*(int(s[1]))+'IV'
                elif s[2]=='9':
                    return 'D'*(num//500)+'C'*((num-500)//100)+'X'*(int(s[1]))+'IX'
                elif int(s[2])<4:
                    return 'D'*(num//500)+'C'*((num-500)//100)+'X'*(int(s[1]))+'I'*int(s[2])
                else:
                    return 'D'*(num//500)+'C'*((num-500)//100)+'X'*(int(s[1]))+'V'+'I'*(int(s[2])-5)    
            else:
                if s[2]=='4':
                    return 'D'*(num//500)+'C'*((num-500)//100)+'L'+'X'*(int(s[1])-5)+'IV'
                elif s[2]=='9':
                    return 'D'*(num//500)+'C'*((num-500)//100)+'L'+'X'*(int(s[1])-5)+'IX'
                elif int(s[2])<4:
                    return 'D'*(num//500)+'C'*((num-500)//100)+'L'+'X'*(int(s[1])-5)+'I'*int(s[2])
                else:
                    return 'D'*(num//500)+'C'*((num-500)//100)+'L'+'X'*(int(s[1])-5)+'V'+'I'*(int(s[2])-5)
        # 900-999                    
        elif num<1000:
            if s[1]=='4':
                if s[2]=='4':
                    return 'CM'+'XL'+'IV'
                elif s[2]=='9':
                    return 'CM'+'XL'+'IX'
                elif int(s[2])<4:
                    return 'CM'+'XL'+'I'*int(s[2])
                else:
                    return 'CM'+'XL'+'V'+'I'*(int(s[2])-5)
            elif s[1]=='9':
                if s[2]=='4':
                    return 'CM'+'XC'+'IV'
                elif s[2]=='9':
                    return 'CM'+'XC'+'IX'
                elif int(s[2])<4:
                    return 'CM'+'XC'+'I'*int(s[2])
                else:
                    return 'CM'+'XC'+'V'+'I'*(int(s[2])-5)
            elif int(s[1])<4:
                if s[2]=='4':
                    return 'CM'+'X'*(int(s[1]))+'IV'
                elif s[2]=='9':
                    return 'CM'+'X'*(int(s[1]))+'IX'
                elif int(s[2])<4:
                    return 'CM'+'X'*(int(s[1]))+'I'*int(s[2])
                else:
                    return 'CM'+'X'*(int(s[1]))+'V'+'I'*(int(s[2])-5)    
            else:
                if s[2]=='4':
                    return 'CM'+'L'+'X'*(int(s[1])-5)+'IV'
                elif s[2]=='9':
                    return 'CM'+'L'+'X'*(int(s[1])-5)+'IX'
                elif int(s[2])<4:
                    return 'CM'+'L'+'X'*(int(s[1])-5)+'I'*int(s[2])
                else:
                    return 'CM'+'L'+'X'*(int(s[1])-5)+'V'+'I'*(int(s[2])-5)                
        #1000-3999
        else:
            if s[1]=='4':
                if s[2]=='4':
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'CD'+'XL'+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'CD'+'XL'+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'CD'+'XL'+'IX'
                    else:
                        return 'M'*(int(s[0]))+'CD'+'XL'+'V'+'I'*(int(s[3])-5)
                elif s[2]=='9':
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'CD'+'XC'+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'CD'+'XC'+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'CD'+'XC'+'IX'
                    else:
                        return 'M'*(int(s[0]))+'CD'+'XC'+'V'+'I'*(int(s[3])-5)
                elif int(s[2])<4:
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'CD'+'X'*(int(s[2]))+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'CD'+'X'*(int(s[2]))+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'CD'+'X'*(int(s[2]))+'IX'
                    else:
                        return 'M'*(int(s[0]))+'CD'+'X'*(int(s[2]))+'V'+'I'*(int(s[3])-5)    
                else:
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'CD'+'L'+'X'*(int(s[2])-5)+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'CD'+'L'+'X'*(int(s[2])-5)+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'CD'+'L'+'X'*(int(s[2])-5)+'IX'
                    else:
                        return 'M'*(int(s[0]))+'CD'+'L'+'X'*(int(s[2])-5)+'V'+'I'*(int(s[3])-5)     
            elif s[1]=='9':
                if s[2]=='4':
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'CM'+'XL'+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'CM'+'XL'+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'CM'+'XL'+'IX'
                    else:
                        return 'M'*(int(s[0]))+'CM'+'XL'+'V'+'I'*(int(s[3])-5)
                elif s[2]=='9':
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'CM'+'XC'+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'CM'+'XC'+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'CM'+'XC'+'IX'
                    else:
                        return 'M'*(int(s[0]))+'CM'+'XC'+'V'+'I'*(int(s[3])-5)
                elif int(s[2])<4:
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'CM'+'X'*(int(s[2]))+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'CM'+'X'*(int(s[2]))+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'CM'+'X'*(int(s[2]))+'IX'
                    else:
                        return 'M'*(int(s[0]))+'CM'+'X'*(int(s[2]))+'V'+'I'*(int(s[3])-5)    
                else:
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'CM'+'L'+'X'*(int(s[2])-5)+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'CM'+'L'+'X'*(int(s[2])-5)+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'CM'+'L'+'X'*(int(s[2])-5)+'IX'
                    else:
                        return 'M'*(int(s[0]))+'CM'+'L'+'X'*(int(s[2])-5)+'V'+'I'*(int(s[3])-5)  
            elif int(s[1])<4:
                if s[2]=='4':
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XL'+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XL'+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XL'+'IX'
                    else:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XL'+'V'+'I'*(int(s[3])-5)
                elif s[2]=='9':
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XC'+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XC'+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XC'+'IX'
                    else:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XC'+'V'+'I'*(int(s[3])-5)
                elif int(s[2])<4:
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'X'*(int(s[2]))+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'X'*(int(s[2]))+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'X'*(int(s[2]))+'IX'
                    else:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'X'*(int(s[2]))+'V'+'I'*(int(s[3])-5)    
                else:
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'L'+'X'*(int(s[2])-5)+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'L'+'X'*(int(s[2])-5)+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'L'+'X'*(int(s[2])-5)+'IX'
                    else:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'L'+'X'*(int(s[2])-5)+'V'+'I'*(int(s[3])-5)  
            else:
                if s[2]=='4':
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XL'+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XL'+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XL'+'IX'
                    else:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XL'+'V'+'I'*(int(s[3])-5)
                elif s[2]=='9':
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XC'+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XC'+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XC'+'IX'
                    else:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XC'+'V'+'I'*(int(s[3])-5)
                elif int(s[2])<4:
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'X'*(int(s[2]))+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'X'*(int(s[2]))+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'X'*(int(s[2]))+'IX'
                    else:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'X'*(int(s[2]))+'V'+'I'*(int(s[3])-5)    
                else:
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'L'+'X'*(int(s[2])-5)+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'L'+'X'*(int(s[2])-5)+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'L'+'X'*(int(s[2])-5)+'IX'
                    else:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'L'+'X'*(int(s[2])-5)+'V'+'I'*(int(s[3])-5)  
                

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值