杂谈记录——整数转罗马数字

Posted 唐 昊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了杂谈记录——整数转罗马数字相关的知识,希望对你有一定的参考价值。

一、贪心算法

列举各种可能

    int[] arr = 1000,900,500,400,100,90,50,40,10,9,5,4,1;
    String[] symbols = "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I";

稍加遍历即可

public String intToRoman(int num)
        StringBuffer stringBuffer = new StringBuffer();
        for (int i = 0; i < arr.length; i++) 
            int index = arr[i];
            while (num >= index)
                stringBuffer.append(symbols[i]);
                num -= index;
            
        
        return stringBuffer.toString();
    

二、硬编码

同样列举另外一种可能性

String[] thousands = “”, “M”, “MM”, “MMM”;
String[] hundreds = “”, “C”, “CC”, “CCC”, “CD”, “D”, “DC”, “DCC”, “DCCC”, “CM”;
String[] tens = “”, “X”, “XX”, “XXX”, “XL”, “L”, “LX”, “LXX”, “LXXX”, “XC”;
String[] ones = “”, “I”, “II”, “III”, “IV”, “V”, “VI”, “VII”, “VIII”, “IX”;

千位数字只能由 M 表示;
百位数字只能由 C,CD,D 和 CM 表示;
十位数字只能由 X,XL,L 和 XC 表示;
个位数字只能由 I,IV,V 和 IX 表示。

public String intToRoman(int num) 
        StringBuffer roman = new StringBuffer();
        roman.append(thousands[num / 1000]);
        roman.append(hundreds[num % 1000 / 100]);
        roman.append(tens[num % 100 / 10]);
        roman.append(ones[num % 10]);
        return roman.toString();
    

以上是关于杂谈记录——整数转罗马数字的主要内容,如果未能解决你的问题,请参考以下文章

习题7-2 求一批整数中出现最多的个位数字

Java浮点数转人民币读法

Java浮点数转人民币读法

leetcode记录-罗马数字转整数

字符串13. 罗马数字转整数

数字特征值