杂谈记录——整数转罗马数字
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();
以上是关于杂谈记录——整数转罗马数字的主要内容,如果未能解决你的问题,请参考以下文章