leetcode之Integer To Roman 的js实现

原题在这里

简单翻译一下。

罗马数字用7个不同的符号表示,I, V, X, L, C, D 和 M。

符号          值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如,2写作II,12写作XII,4写作IV,可以理解为5-1,类似的有9,写作IX,可以理解为10-1,40写作XL,90写作XC,400写作CD,900写作CM。

那么,问题来了,指定一个1-3999的整数,将其转换为罗马数字。

举个例子

Input: 1994
Output: "MCMXCIV"
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.

思路就是我们要取出指定整数n的各个位上的数字做转换。

个位数取值范围是

["I","II","III","IV","V","VI","VII","VIII","IX"];

十位数取值范围是

["X","XX","XXX","XL","L","LX","LXX","LXXX","XC"];

百位数取值范围是

["C","CC","CCC","CD","D","DC","DCC","DCCC","CM"];

千位数取值范围

["M","MM","MMM"];

需要注意的是,当某位取值为0的时候,这个时候是不需要找对应的罗马数字的。为什么呢?我们假设对308转换,因为罗马数字定义了30为XXX,8为VIII,所以是XXXVIII。

上段代码吧,很简单。

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

console.log(integer_to_roman(1994));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值