标签:dev while 存储 net ring wan 编程 最简 web
Roman Numeral Converter
这是一些对你有帮助的资源:
测试数据:
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(1023)
应该返回 "MXXIII"。convert(2014)
应该返回 "MMXIV"。convert(3999)
应该返回 "MMMCMXCIX"。
function convert(num) { //按个、十、百、千(1~4999)存储对应数字所对照的罗马数字 var UNITS = [‘‘,‘I‘,‘II‘,‘III‘,‘IV‘,‘V‘,‘VI‘,‘VII‘,‘VIII‘,‘IX‘]; var TENS = [‘‘,‘X‘,‘XX‘,‘XXX‘,‘XL‘,‘L‘,‘LX‘,‘LXX‘,‘LXXX‘,‘XC‘]; var HUNDERDS = [‘‘,‘C‘,‘CC‘,‘CCC‘,‘CD‘,‘D‘,‘DC‘,‘DCC‘,‘DCCC‘,‘CM‘]; var THOUSANDS = [‘‘,‘M‘,‘MM‘,‘MMM‘,‘MMMM‘]; var MIN = 1; var MAX = 4999; var unit = ‘‘,ten=‘‘,hunderd = ‘‘,thousand = ‘‘; var newNum = num.toString().split(‘‘).reverse(); var length = newNum.length; if(num >0 && num < 5000){ switch(length) { case 1: unit = UNITS[newNum[0]]; break; case 2: unit = UNITS[newNum[0]]; ten = TENS[newNum[1]]; break; case 3: unit = UNITS[newNum[0]]; ten = TENS[newNum[1]]; hunderd = HUNDERDS[newNum[2]]; break; case 4: unit = UNITS[newNum[0]]; ten = TENS[newNum[1]]; hunderd = HUNDERDS[newNum[2]]; thousand = THOUSANDS[newNum[3]]; break; } } else { alert("请输入1~4999之间的数字。"); } num = thousand + hunderd + ten + unit; return num; } convert(36);
//CSDN:https://blog.csdn.net/wangmc0827/article/details/72550839
function convert(num) { var sig = 0,ten = 0,hundred = 0,thousand = 0; var str = ‘‘; sig = num % 10; if(num >= 10) ten = Math.floor(num / 10 % 10); if(num >= 100) hundred = Math.floor(num / 100 % 10); if(num >= 1000) thousand = Math.floor(num / 1000); var count = { thousand : thousand, hundred : hundred, ten: ten,sig : sig };console.log(count); for(var i in count){ switch(i){ case ‘thousand‘: str += jisuan(‘M‘,count[i]); break; case ‘hundred‘: str += jisuan(‘C‘,count[i]); break; case ‘ten‘: str += jisuan(‘X‘,count[i]); break; case ‘sig‘: str += jisuan(‘I‘,count[i]); break; } } return str; } function jisuan(str,num){ if(num === 0) return ‘‘; if(str == ‘M‘){ switch(num){ case 1: return ‘M‘; case 2: return ‘MM‘; case 3: return ‘MMM‘; default: return ‘‘; } } if(str == ‘C‘){ switch(num){ case 1: return ‘C‘; case 2: return ‘CC‘; case 3: return ‘CCC‘; case 4: return ‘CD‘; case 5: return ‘D‘; case 6: return ‘DC‘; case 7: return ‘DCC‘; case 8: return ‘DCCC‘; case 9: return ‘CM‘; default: return ‘‘; } } if(str == ‘X‘){ switch(num){ case 1: return ‘X‘; case 2: return ‘XX‘; case 3: return ‘XXX‘; case 4: return ‘XL‘; case 5: return ‘L‘; case 6: return ‘LX‘; case 7: return ‘LXX‘; case 8: return ‘LXXX‘; case 9: return ‘XC‘; default: return ‘‘; } } if(str == ‘I‘){ switch(num){ case 1: return ‘I‘; case 2: return ‘II‘; case 3: return ‘III‘; case 4: return ‘IV‘; case 5: return ‘V‘; case 6: return ‘VI‘; case 7: return ‘VII‘; case 8: return ‘VIII‘; case 9: return ‘IX‘; default: return ‘‘; } } } convert(100);
// 另一个解法,好像是简书
从最大的数字开始遍历,如果num大于当前数,则减去当前数,继续进入循环。字符串则加上对应的罗马字符。 function convert(num) { var numArr = [1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000]; var strArr = ["I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"]; var result = ""; while (num > 0) { var i = numArr.length; while (i >= 0) { if (num >= numArr[i]) { result += strArr[i]; num -= numArr[i]; } else { i--; } } } return result; } convert(100); 这个解法是目前发现最简单的
FCC_Intermediate Algorithm Scripting_Roman Numeral Converter
标签:dev while 存储 net ring wan 编程 最简 web
原文地址:https://www.cnblogs.com/yoursatan/p/12402046.html