FreeCodeCamp之数字转罗马数字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}

以上是关于FreeCodeCamp之数字转罗马数字的主要内容,如果未能解决你的问题,请参考以下文章

Roman Numeral Converter-freecodecamp算法题目

Smallest Common Multiple FreeCodeCamp

freecodecamp笔记--js

Arguments Optional-freecodecamp算法题目

JavaScript笔试题(js高级代码片段)

scala练手之数字转汉字小工具