[英]Converting integers to their roman numeral equivalents
鑒於此圖表:
我想將整數轉換為它們受人尊敬的羅馬字母。 例如,假設我們有一個整數列表,如: [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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.