leetcode每日一练:整数转换为罗马数字(java)

题目:

罗马数字由七个不同的符号表示:I,V,X,L,C,D和M。
符号值。
I 1。
V 5。
X 10。
L 50。
C 100。
D 500。
M 1000。
例如,两个用罗马数字写成二,只有两个一个加在一起。十二写成,十二,也就是简单的X+II。数字二十七写成二十七,即XX+V+II。
罗马数字通常从左到右写成从大到小。但是,四的数字不是三。相反,数字4被写成IV。因为1在5之前,我们把它减为4。同样的原则也适用于数字9,它被写为IX。使用减法的情况有六种:
我可以放在V(5)和X(10)之前,得到4和9。
X可以放在L(50)和C(100)之前,使之成为40和90。
C可以放在D(500)和M(1000)之前,得到400和900。
给定一个整数,将其转换为罗马数字。输入保证在1到3999之间。
示例1:
输入:3输出:“III”
示例2:输入:4输出:“IV”
示例3:输入:9输出:“IX”
示例4:输入:58输出:LVIII解释:l=50,V=5,III=3。
例5:输入:1994 输出:MCMXCIV解释:M=1000,CM=900,=90,IV=4。

思想:麻烦了一点的判断。把这个数由个位开始拆分,判断每一个分位的罗马数字即可。

class Solution {
 public String intToRoman(int num) {
    String s="";
    int tag=1;
    int member=0;
    while(num>0){
    //拆分每个位置的分位
        member=(num%10)*tag;
        System.out.println(member);
        tag=tag*10;
        if(member>0 && member<=10){
            if(member==4){
                s="IV"+s;
            }else if(member==9){
                s="IX"+s;
            }else if(member==5){
               s="V"+s; 
            }else if(member==10){
             s="X"+s;   
            }else{
                if(member<5){
                    for(int i=1;i<=member;i++){
                        s="I"+s;
                    }
                }else{
                    String a="";
                    a="V";
                    for(int i=1;i<=member-5;i++){
                        a=a+"I";
                    }
                    s=a+s;
                }
            }
        }
        else if(member>10 && member<=100){
            if(member==40){
                s="XL"+s;
            }else if(member==90){
                s="XC"+s;
            }else if(member==50){
               s="L"+s; 
            }else if(member==100){
             s="C"+s;   
            }else{
                if(member<50){
                    for(int i=10;i<=member;i=i+10){
                        s="X"+s;
                    }
                }else{
                    String a="";
                    a="L";
                    for(int i=10;i<=member-50;i=i+10){
                        a=a+"X";
                    }
                    s=a+s;
                }
            }
        }
        else if(member>100 && member<=1000){
            if(member==400){
                s="CD"+s;
            }else if(member==900){
                s="CM"+s;
            }else if(member==500){
               s="D"+s; 
            }else if(member==1000){
             s="M"+s;   
            }else{
                if(member<500){
                    for(int i=100;i<=member;i=i+100){
                        s="C"+s;
                    }
                }else{
                    String a="";
                    a="D";
                    for(int i=100;i<=member-500;i=i+100){
                        a=a+"C";
                    }
                    s=a+s;
                }
            }
        }
        else{
            for(int i=1000;i<=member;i=i+1000){
                s="M"+s;
            }
        }
        
        num=num/10;
    }
    return s;
}
}
今天的题目我做的稍微麻烦了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值