码迷,mamicode.com
首页 > 其他好文 > 详细

FreeCodeCamp之数字转罗马数字

时间:2017-09-30 13:24:03      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:pix   app   blank   分支   依次   合成   lan   hsi   罗马   

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

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之数字转罗马数字

标签:pix   app   blank   分支   依次   合成   lan   hsi   罗马   

原文地址:http://www.cnblogs.com/skyyo/p/7614368.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!