Javascript--将十进制数字转换成罗马数字显示
2018-06-24 02:16:53来源:未知 阅读 ()
下午在FCC(FreeCodeCamp)中文网上做到一道练习题:将给定的数字转换成罗马数字。折磨了一个多小时,终于能把基本功能给实现了。过程如下:
关于罗马数字
罗马数字的详细介绍可见百度,或者罗马数字。这里作一下简单的介绍(图片选自罗马数字):
1.罗马数字选用7个罗马字母(大写)作数字,代表的十进制数字如下:
一些数字用罗马数字表示为:
2.罗马数字的计数规则:
(1) 相同数字连写,则值相加,如III = 3;
(2) 小的数在大的数右边,也是累加,如VI = 6;
(3) 小的数在大的数左边,结果为大数减小数,如IV = 4;
(4) 在数的上方划一条横线,表示扩大1000倍。
一个简单粗暴的例子:
但是,我们会遇到一些特别的情况:
(1) 3999 = MMMCMXCIX,3999 = MMMDCCCCLXXXXVIIII,两种结果都是3999,但是我们一般会选择简单的,也就是前者;
(2) 同理,3444 = MMMCDXLIV, 3444 = MMMCCCCXXXXIIII,也是选择前者的方式。
于是,先把1~9的情况都列举一下:
可以看出,罗马数字对4和9的处理是不同与其他的。
列举4、9有关的部分数字:
思路和代码实现
1.先把数字转化为相应的罗马字母,如3999 = MMMDCCCCLXXXXVIIII;
2.再通过replace()将4和9的情况进行替换,使得3999 = MMMCMXCIX。
1 function convert(num) { 2 var newArr = []; 3 var newStr; 4 //先把数字转化为相应的罗马字母 5 while(num > 0) { 6 if(num - 1000 >= 0) { 7 newArr.push('M'); 8 num -= 1000; 9 } else if (num - 500 >= 0) { 10 newArr.push('D'); 11 num -= 500; 12 } else if (num - 100 >= 0) { 13 newArr.push('C'); 14 num -= 100; 15 } else if (num - 50 >= 0) { 16 newArr.push('L'); 17 num -= 50; 18 } else if(num - 10 >= 0) { 19 newArr.push('X'); 20 num -= 10; 21 } else if(num - 5 >= 0) { 22 newArr.push('V'); 23 num -= 5; 24 } else if(num - 1 >= 0) { 25 newArr.push('I'); 26 num -= 1; 27 } 28 } 29 newStr = newArr.join(''); 30 //将4和9的情况进行替换 31 newStr = newStr.replace(/VI{4}|LX{4}|DC{4}|I{4}|X{4}|C{4}/g, function(match) { 32 switch(match) { 33 case 'VIIII': 34 return "IX"; 35 case 'LXXXX': 36 return "XC"; 37 case 'DCCCC': 38 return "CM"; 39 case 'IIII': 40 return "IV"; 41 case 'XXXX': 42 return "XL"; 43 case 'CCCC': 44 return "CD"; 45 } 46 }); 47 return newStr; 48 }
测试部分数字:
console.log(convert(3999)); // MMMCMXCIX console.log(convert(3444)); // MMMCDXLIV console.log(convert(1234)); // MCCXXXIV console.log(convert(83)); // LXXXIII console.log(convert(123)); // CXXIII
至此,基本功能已经实现了。
另外,用for循环测试了前几千个较小的数,都是能正常转换的,较大的数长度会较长,因为没有对5000,10000等数进行处理。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:来点干货
- 总结js限制文本框的输入数字方法 2019-12-02
- javaScript 判断字符串是否为数字的简单方法 2019-08-29
- js截取字符串相关的知识点 2019-08-14
- js字符串转为数字方法parseInt()、减号、乘号、JSON.parse() 2019-08-14
- js中关于带数字类型参数传参丢失首位数字0问题 2019-08-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash