第12题 数字转为罗马数字

罗马数字采用七个罗马字母作数字、即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。

一开始我按照10进制的思想来做,针对不同区间,编辑不同的罗马表达方式,比如1~9,10~90,100~900,1000~3000

以下是代码:

public static String intToRoman(int num) {
        
        //
        String roman = "";
        if(num<=0) return "";
        if(num<=10){
            String[] tens = new String[]{"I","II","III","IV","V","VI","VII","VIII","IX","X"};
            roman = roman+tens[num-1];
            
        }
        if(10<num && num<100){ //90以内都可以用I V X L表示
            String[] ten2nines = new String[] {"X","XX","XXX","XL","L","LX","LXX","LXXX","XC"}; //10,20,30,40,50,60,70,80
            int H = ((int) (num/10));
            int L = num-H*10;
            roman = roman + ten2nines[H-1] + intToRoman(L);
        }
        
        if(100<=num && num<1000){
            String[] len = new String[] {"C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};//100,200,300,400,500,600,700,800,900
            int H = ((int) (num/100));
            int L = num-H*100;
            roman = roman + len[H-1] + intToRoman(L);
        }
        if(1000<=num && num <4000){
            String[] len = new String[] {"M","MM","MMM"};
            int H = ((int) (num/1000));
            int L = num-H*1000;
            System.out.println("H:"+H+",L:"+L);
            roman = roman + len[H-1] + intToRoman(L);
        }
        return roman;
    }

后来看到网上有一个简便的,先找到所有罗马数字的基,对于十进制,基为(1,2,3,4,5,6,7,8,9,10),罗马数字的基为("M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"),对应数字(1000,900,500,400,100,90,50,40,10,9,5,4,1)

以下为代码:

public static String intToRoman(int num) {
        String data[] = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
        int value[] = {1000,900,500,400,100,90,50,40,10,9,5,4,1}, base = -1;
        StringBuilder result = new StringBuilder();

        for(int i = 0;i < data.length;i++){
            if((base=num/value[i])!=0){
                while(base--!=0) result.append(data[i]);
                num=num%value[i];
            }
        }
        return result.toString();
}
原文地址:https://www.cnblogs.com/wuchaodzxx/p/5852385.html