FreeCodeCamp之数字转罗马数字

将给定的数字转换成罗马数字。所有返回的 罗马数字 都应该是大写形式。

convert(2) 应该返回 "II"。convert(3) 应该返回 "III"。convert(4) 应该返回 "IV"。convert(5) 应该返回 "V"。convert(9) 应该返回 "IX"。convert(12) 应该返回 "XII"。convert(16) 应该返回 "XVI"。convert(29) 应该返回 "XXIX"。convert(44) 应该返回 "XLIV"。convert(45) 应该返回 "XLV"。convert(68) 应该返回 "LXVIII"。
convert(83) 应该返回 "LXXXIII"。convert(97) 应该返回 "XCVII"。convert(99) 应该返回 "XCIX"。convert(500) 应该返回 "D"。convert(501) 应该返回 "DI"。convert(649) 应该返回 "DCXLIX"。convert(798) 应该返回 "DCCXCVIII"。convert(891) 应该返回 "DCCCXCI"。convert(1000) 应该返回 "M"。convert(1004) 应该返回 "MIV"。convert(1006) 应该返回 "MVI"。convert(3999) 应该返回 "MMMCMXCIX"。

罗马数字对应1 I  5 V  10 X  50 L  100  C   500 D   1000 M其他900就是CM,1100就是MC其他类推。

提示给定是splice(),indexOf()和join()有想过用switch语句,来分成很多个分支,对应的值进入相应的分支,可以用除法加取正来获取每位对应的值,付给相应的分支,最后合成。但是写起来太大,执行起来反而更快。或者用forEach来循环,将数字和罗马数字构成两个一一对应的数组,从高位依次减,再获取index获得相应的罗马数字。

function convert(num) {
         var numbers=[1000,900,500,400,100,90,50,40,10,9,5,4,1];//用numbers中的值依次和item比较,大于item则返回对应的index返回Romans中对应字母加入字符串str中,num减去item
         var romans=['M','CM','D','DC','C','XC','L','XL','X','IX','V','IV','I'];
         var str="";
         numbers.forEach(function(item,index,array){
                while(num>=item){
                         str+=romans[index];
                         num-=item;
                 }
         });

return str;
}

转载于:https://www.cnblogs.com/skyyo/p/7614368.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值