欢迎访问宙启技术站
智能推送

编写Java函数将数字转换为罗马数字形式

发布时间:2023-06-29 22:26:46

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"。