LeetCode_12---Integer to Roman

Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

翻译:整数转换为罗马数字(1-3999)

    Code:

    import java.util.*;
    
    /**
     * @author MohnSnow
     * @time 2015年6月3日 下午1:42:40
     * @title Integer to Roman
     */
    public class LeetCode12 {
    
    	/**
    	 * @param argsmengdx
    	 *            -fnst
    	 */
    	/*
    	 * test:
    	 * 个位数举例
    	 * Ⅰ,1 】Ⅱ,2】 Ⅲ,3】 Ⅳ,4 】Ⅴ,5 】Ⅵ,6】Ⅶ,7】 Ⅷ,8 】Ⅸ,9 】
    	 * 十位数举例
    	 * Ⅹ,10】 Ⅺ,11 】Ⅻ,12】 XIII,13】 XIV,14】 XV,15 】XVI,16 】XVII,17 】XVIII,18】
    	 *  XIX,19】 XX,20】 XXI,21 】XXII,22 】XXIX,29】 XXX,30】 XXXIV,34】 XXXV,35 】
    	 *  XXXIX,39】 XL,40】 L,50 】LI,51】 LV,55】 LX,60】 LXV,65】 LXXX,80】 XC,90 】
    	 *  XCIII,93】 XCV,95 】XCVIII,98】 XCIX,99 】
    	 * 百位数举例
    	 * C,100】 CC,200 】CCC,300 】CD,400】 D,500 】DC,600 】DCC,700】 DCCC,800 】CM,900】 
    	 * CMXCIX,999】
    	 * 千位数举例
    	 * M,1000】 MC,1100 】MCD,1400 】MD,1500 】MDC,1600 】MDCLXVI,1666】 MDCCCLXXXVIII,1888 】
    	 * MDCCCXCIX,1899 】MCM,1900 】MCMLXXVI,1976】 MCMLXXXIV,1984】
    	 * MCMXC,1990 】MM,2000 】MMMCMXCIX,3999】
    	 * 千位数以上举例
    	 * ,65,259 】,134945584】, 183650】
    	 */
    	//348msA 
    	public static String intToRoman(int num) {
    		if(num<1 || num > 3999){
    			return "";
    		}
    		int [] strInt = new int[4];
    		int i = 3;
    		while(num>9){
    			strInt[i--] = num%10;
    			num = num/10;
    		}
    		strInt[i]=num;
    		String[] roma = new String[4];
    		StringBuffer ret = new StringBuffer();
    		switch(strInt[0]){
    			case 0: roma[0]="";break;
    			case 1: roma[0]="M";break;
    			case 2: roma[0]="MM";break;
    			case 3: roma[0]="MMM";break;
    			default: break;
    		}
    		ret.append(roma[0]);
    		switch(strInt[1]){
    			case 0: roma[1]="";break;
    			case 1: roma[1]="C";break;
    			case 2: roma[1]="CC";break;
    			case 3: roma[1]="CCC";break;
    			case 4: roma[1]="CD";break;
    			case 5: roma[1]="D";break;
    			case 6: roma[1]="DC";break;
    			case 7: roma[1]="DCC";break;
    			case 8: roma[1]="DCCC";break;
    			case 9: roma[1]="CM";break;
    			default: break;
    		}
    		ret.append(roma[1]);
    		switch(strInt[2]){
    			case 0: roma[2]="";break;
    			case 1: roma[2]="X";break;
    			case 2: roma[2]="XX";break;
    			case 3: roma[2]="XXX";break;
    			case 4: roma[2]="XL";break;
    			case 5: roma[2]="L";break;
    			case 6: roma[2]="LX";break;
    			case 7: roma[2]="LXX";break;
    			case 8: roma[2]="LXXX";break;
    			case 9: roma[2]="XC";break;
    			default: break;
    		}
    		ret.append(roma[2]);
    		switch(strInt[3]){
    			case 0: roma[3]="";break;
    			case 1: roma[3]="I";break;
    			case 2: roma[3]="II";break;
    			case 3: roma[3]="III";break;
    			case 4: roma[3]="IV";break;
    			case 5: roma[3]="V";break;
    			case 6: roma[3]="VI";break;
    			case 7: roma[3]="VII";break;
    			case 8: roma[3]="VIII";break;
    			case 9: roma[3]="IX";break;
    			default: break;
    		}
    		ret.append(roma[3]);		
    		return ret.toString();
    	}
    	//把特殊字符放到数组里面312msA
    	public static String intToRoman1(int number) {  
            int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };  
            String[] numerals = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };  
            StringBuilder result = new StringBuilder();  
            for (int i = 0; i < values.length; i++) {  
                while (number >= values[i]) {  
                    number -= values[i];  
                    result.append(numerals[i]);  
                }  
            }  
            return result.toString();  
        }  
    	public static void main(String[] args) {
    		int a = 1689;
    		System.out.println(a);
    		System.out.println(intToRoman(a));
    		System.out.println(intToRoman1(a));
    	}
    
    }
    




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

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

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

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值