编写Java函数将数字转换为罗马数字形式
import java.util.LinkedHashMap;
import java.util.Map;
public class NumberToRoman {
private static final LinkedHashMap<Integer, String> romanSymbols = new LinkedHashMap<>();
static {
romanSymbols.put(1000, "M");
romanSymbols.put(900, "CM");
romanSymbols.put(500, "D");
romanSymbols.put(400, "CD");
romanSymbols.put(100, "C");
romanSymbols.put(90, "XC");
romanSymbols.put(50, "L");
romanSymbols.put(40, "XL");
romanSymbols.put(10, "X");
romanSymbols.put(9, "IX");
romanSymbols.put(5, "V");
romanSymbols.put(4, "IV");
romanSymbols.put(1, "I");
}
public static String convertToRoman(int number) {
StringBuilder sb = new StringBuilder();
for (Map.Entry<Integer, String> entry : romanSymbols.entrySet()) {
int value = entry.getKey();
String symbol = entry.getValue();
while (number >= value) {
sb.append(symbol);
number -= value;
}
}
return sb.toString();
}
public static void main(String[] args) {
int number = 1996;
String romanNumber = convertToRoman(number);
System.out.println("Roman numeral for " + number + " is: " + romanNumber);
}
}
在上面的代码中,我们使用LinkedHashMap将阿拉伯数字和对应的罗马数字符号建立映射关系。然后,我们遍历映射关系,从最大的值开始,逐个比较输入数字和映射关系中的值。如果输入数字大于等于映射关系中的值,则将对应的罗马数字添加到结果字符串中,并从输入数字中减去对应的值。重复这个过程直到输入数字为0。最后返回结果字符串。在测试例子中,我们将1996转换为罗马数字形式,结果为"MCMXCVI"。
