首页 > 代码库 > 第12题 数字转为罗马数字

第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();}

 

第12题 数字转为罗马数字