java - 将整数转换为其罗马数字等价物
问题描述
鉴于此图表:
我想将整数转换成他们尊敬的罗马字母。例如,假设我们有一个整数列表,例如:[1, 49, 23]
。该方法应返回如下内容:['I', 'XLIX', 'XXIII']
. 49 是 40 + 9,所以它将是“XLIX”。
这是我到目前为止用 Java 写的:
public static List<String> romanizer(List<Integer> numbers) {
String[] romanLetters = {"I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M" };
int[] numberArray = { 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000 };
ArrayList<String> result = new ArrayList<>();
int times = 0;
for (int h = numberArray.length - 1; h >= 0; h--) {
for (int d = 0; d < numbers.size(); d++) {
times = numbers.get(d) / numberArray[h];
numbers.set(d, numbers.get(d) % numberArray[h]);
}
while (times > 0) {
result.add(romanLetters[h]);
times--;
}
}
return result;
}
但我得到了这样的东西:[X, X, I, I, I]
。任何人都可以帮助/查看问题吗?
解决方案
为了尽量减少混淆,我建议制作两个函数而不是一个:
private static final String[] ROMAN_LETTERS = {"I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M" };
private static final int[] ROMAN_NUMBERS = { 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000 };
public static String romanizer(int num) {
StringBuilder result = new StringBuilder();
for (int h = ROMAN_NUMBERS.length - 1; h >= 0; h--) {
result.append(ROMAN_LETTERS[h].repeat(num / ROMAN_NUMBERS[h]));
num = num % ROMAN_NUMBERS[h];
}
return result.toString();
}
public static List<String> romanizer(List<Integer> numbers) {
List<String> result = new ArrayList<>();
for (int num : numbers)
result.add(romanizer(num));
return result;
}
推荐阅读
- go - Go 标准库中的 MaxHeap 和 MinHeap
- android - 选择 RecyclerView 的最后一项时如何防止 ScrollView 上移?
- java - 在使用另一个微服务时获得空响应?
- xml - 使用 XmlParser().parseText(xml_file) 从 XML 文件中提取值到 Jenkinsfile 管道
- python - SWIG 生成的 Python 函数注释不起作用
- python-3.x - 使用 setuptools(setup.py) 在主模块之外添加文件夹和子文件夹
- javascript - 加载时我需要显示和获取图像大小
- elasticsearch - Elasticsearch,集群性能比单主机服务器差吗?
- javafx - 类 Circle 中的构造函数 Circle 不能应用于给定类型
- r - 如何使用 R 运行双循环