阿拉伯数字转罗马数字

仅仅适用于小于3999的数,如果大于3999 就堆M吧

function convert(num) {
    let roma = "";
    if(num < 0 || num >3999) return roma;
    let count = (num + "").length;//几位数
    let l = 0;
    while(count > 0){
        if(num >= 10){
            l = Math.floor(num / Math.pow(10,count - 1));
        }else{
            l = num;
            count = 1;
        }
        roma = roma + getRoma(l,count);
        if(num > 0)
        num = num - l * Math.pow(10,count - 1);
        count --;
    }
 return roma;
}
function getRoma(num,count){
    let str = "";
    if(num === 0)return str;
    if(num > 0 && num <= 3){
        while(num > 0){
            str += getRomaOne(Math.pow(10,count - 1));
            num --;
        }
    }else if(num === 4){
         str += (getRomaOne(Math.pow(10,count - 1)) + getRomaOne(5 * Math.pow(10,count - 1)));
    }else if(num <= 8){
        str += getRomaOne(5 * Math.pow(10,count - 1))
         while(num > 5){
            str += getRomaOne(Math.pow(10,count - 1));
            num --;
        }
    }else if(num === 9){
        str += (getRomaOne(Math.pow(10,count - 1)) + getRomaOne(Math.pow(10,count)));
    }
    return str;
}
function getRomaOne(num){
    switch(num){
        case 1:
            return "I";
        case 5:
            return "V";
        case 10:
            return "X";
        case 50:
            return "L";
        case 100:
            return "C";
        case 500:
            return "D";
        case 1000:
            return "M"
        default:
            return ""
    }
}
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值