每日算法题:19.6.26

本文介绍了一种将整数转换为罗马数字的算法实现,通过构建映射表和逐位处理的方式,实现了1到3999范围内整数到罗马数字的转换。示例代码展示了如何处理千位、百位、十位和个位数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。

示例:

输入: 1994
输出: "MCMXCIV"
解释: M = 1000, CM = 900, XC = 90, IV = 4.

代码:

public class Test8 {
    public static void main(String[] args) {
        String s = new Test8().intToRoman(1994);
        System.out.println(s);
    }

    public String intToRoman(int num) {
        HashMap<Integer, String> map = new HashMap<Integer, String>();
        map.put(1,"I");
        map.put(5,"V");
        map.put(10,"X");
        map.put(50,"L");
        map.put(100,"C");
        map.put(500,"D");
        map.put(1000,"M");
        StringBuilder result = new StringBuilder();

        if (num/1000!=0) {
            int temp = num/1000;
            for (int i = 0; i < temp; i++) {
                result.append(map.get(1000));
            }
            num = num%1000;
        }

        if (num/100!=0) {
            int temp = num/100;
            if(temp<4){
                for (int i = 0; i < temp; i++) {
                    result.append(map.get(100));
                }
            }else if (temp==4){
                result.append("CD");
            }else if (temp>=5 && temp<9){
                result.append(map.get(500));
                for(int i = temp-5;i>0;i--){
                    result.append(map.get(100));
                }
            }else {
                result.append("CM");
            }
            num = num%100;
        }

        if (num/10!=0) {
            int temp = num/10;
            if(temp<4){
                for (int i = 0; i < temp; i++) {
                    result.append(map.get(10));
                }
            }else if (temp==4){
                result.append("XL");
            }else if (temp>=5 && temp<9){
                result.append(map.get(50));
                for(int i = temp-5;i>0;i--){
                    result.append(map.get(10));
                }
            }else {
                result.append("XC");
            }
            num = num%10;
        }

        if (num/1!=0) {
            int temp = num/1;
            if(temp<4){
                for (int i = 0; i < temp; i++) {
                    result.append(map.get(1));
                }
            }else if (temp==4){
                result.append("IV");
            }else if (temp>=5 && temp<9){
                result.append(map.get(5));
                for(int i = temp-5;i>0;i--){
                    result.append(map.get(1));
                }
            }else {
                result.append("IX");
            }
        }

        return result.toString();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值