算法第八次作业

本文介绍了一种将整数转换为罗马数字的算法实现,包括详细的代码逻辑和一种更简洁的方法。通过逐位处理,利用特定的罗马数字规则完成转换。

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

题目:Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.
解析:
这道题第一点告诉我们的是:一定要学好英语~!roman numeral是罗马数字的意思。
第二点就是要见多识广,比如了解罗马数字构成(比如会百度百科)
题目本身不难,主要是在对罗马数字的理解上。比如大于3000的数字,先是千位,有num_M个M;然后在【900,1000)范围内加一个CM,剩下的899以内根据D(500)/CD(400)再进行划分!
代码:

class Solution {
public:
    string intToRoman(int num) {
        string str;
        int num_M=num/1000;
        for(int i=0;i<num_M;i++)
            str+='M';
        num=num%1000;
        if(num>=900){
            str+="CM";
            num-=900;
        }
        if(num>=400){
            if(num<500){
                str+="CD";
                num-=400;
            }else{
                str+='D';
                num-=500;
            }
        }
        int num_C=num/100;
        for(int j=0;j<num_C;j++){
            str+='C';
        }
        num=num%100;
        if(num>=90){
            str+="XC";
            num-=90;
        }
        if(num>=40){
            if(num<50){
                str+="XL";
                num-=40;
            }else{
                str+='L';
                num-=50;
            }
        }
        int num_X=num/10;
        for(int k=0;k<num_X;k++)
            str+='X';
        num=num%10;
        if(num==9)//后面实在不想再动脑了
            str+="IX";
        if(num==8)
            str+="VIII";
        if(num==7)
            str+="VII";
        if(num==6)
            str+="VI";
        if(num==5)
            str+="V";
        if(num==4)
            str+="IV";
        if(num==3)
            str+="III";
        if(num==2)
            str+="II";
        if(num==1)
            str+="I";
        return str;
    }
};

然而,官网上有大神给出了一种极其精简的方法

public static String intToRoman(int num) {
    String M[] = {"", "M", "MM", "MMM"};
    String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
    String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
    String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
    return M[num/1000] + C[(num%1000)/100] + X[(num%100)/10] + I[num%10];
}

其实思想是类似的,不过它巧妙地运用String类,膜拜!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值