leetcode12 Integer to Roman

这个题目是把1~3999之间的整数转换为罗马数字。首先列举一下几个基本的罗马数字,1---I,5---V,10---X,50---L,100---C,500---D,1000---M。其他的罗马数字都是由这几个组成的。一个较小的单位连在较大单位前面,表示后面的减去前面的,比如CM即为900,XL即为40。我自己写了一个方法,但是比较笨拙,如下所示:

public String intToRoman(int num) {
        Map
   
   
    
     map=new HashMap
    
    
     
     ();
        map.put(1, "I");
        map.put(2, "II");
        map.put(3, "III");
        map.put(4, "IV");
        map.put(5, "V");
        map.put(6, "VI");
        map.put(7, "VII");
        map.put(8, "VIII");
        map.put(9, "IX");
        map.put(10, "X");
        map.put(20, "XX");
        map.put(30, "XXX");
        map.put(40, "XL");
        map.put(50, "L");
        map.put(60, "LX");
        map.put(70, "LXX");
        map.put(80, "LXXX");
        map.put(90, "XC");
        map.put(100, "C");
        map.put(200, "CC");
        map.put(300, "CCC");
        map.put(400, "CD");
        map.put(500, "D");
        map.put(600, "DC");
        map.put(700, "DCC");
        map.put(800, "DCCC");
        map.put(900, "CM");
        map.put(1000, "M");
        map.put(2000, "MM");
        map.put(3000, "MMM");
        
        if(num<1 || num>3999){
        	return null;
        }
        
        StringBuffer sb=new StringBuffer();
        int number=num;
        int count=1;
        while(number/10 !=0){      //计算num有几位
        	count++;
        	number=number/10;
        }
        
        for(int i=count;i>0;i--){
        	int next=num%(int)Math.pow(10, i-1);
        	int temp=num-next;
        	
        	if(temp!=0){
        		sb.append(map.get(temp));
        	}
        	num=next;
        }
		return sb.toString();
    }

    
    
   
   

在网上看了看别人的代码,写的都很好,而且扩展性很强

public String intToRoman1(int num) {
        String[] str = new String[] { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
        int[] val = new int[] { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
 
        StringBuilder sb = new StringBuilder();
        for (int i = 0; num > 0; i++) {
             
            while (num >= val[i]) {
                num -= val[i];
                sb.append(str[i]);
            }
 
        }
        return sb.toString();
 
    }


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值