--- title: Roman Numeral Converter localeTitle: 罗马数字转换器 --- ![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 ":triangular_flag_on_post:")如果卡住,请记得使用**`Read-Search-Ask`** 。尝试配对程序![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 ":busts_in_silhouette:")并编写自己的代码![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":铅笔:") ### ![:checkered_flag:](https://forum.freecodecamp.com/images/emoji/emoji_one/checkered_flag.png?v=3 ":checkered_flag:")问题说明: 您将创建一个将整数转换为罗马数字的程序。 #### 相关链接 * [罗马数字](http://www.mathsisfun.com/roman-numerals.html) * [方法Array.splice()](http://forum.freecodecamp.com/t/javascript-array-prototype-splice/14307) * [Array.indexOf()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf) * [Array.join()](http://forum.freecodecamp.com/t/javascript-array-prototype-join/14292) ## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ":speech_balloon:")提示:1 创建两个数组,一个使用罗马数字,一个使用十进制等效的新表单将非常有用。 > _现在尝试解决问题_ ## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ":speech_balloon:")提示:2 如果将数字添加到引入新字母之前的数组中,例如4,9和40的值,它将为您节省大量代码。 > _现在尝试解决问题_ ## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ":speech_balloon:")提示:3 您不能将三个以上的连续罗马数字放在一起。 > _现在尝试解决问题_ ## 扰流警报! ![警告牌](//discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif) **提前解决!** ## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":初学者:")基本代码解决方案 ``` var convertToRoman = function(num) { var decimalValue = [ 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 ]; var romanNumeral = [ 'M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I' ]; var romanized = ''; for (var index = 0; index < decimalValue.length; index++) { while (decimalValue[index] <= num) { romanized += romanNumeral[index]; num -= decimalValue[index]; } } return romanized; } // test here convertToRoman(36); ``` ![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":火箭:") [运行代码](https://repl.it/CLmf/0) ### 代码说明: * 我们首先创建两个具有匹配索引的默认转换的数组。这些被称为`decimalValue`和`romanNumeral` 。我们还创建了一个`romanized`的空字符串变量,它将包含最终的罗马数字。 * 使用for循环,我们循环遍历`decimalValue`数组的`decimalValue` 。我们继续循环,直到当前`index`的值适合`num` 。 * 接下来,我们添加罗马数字,并将`num`十进制等值。 * 最后,我们返回`romanized`的值。 #### 相关链接 * [对于循环](http://forum.freecodecamp.com/t/javascript-for-loop/14666) * 循环时 ## ![:sunflower:](https://forum.freecodecamp.com/images/emoji/emoji_one/sunflower.png?v=3 ":向日葵:")中级代码解决方案: ``` function convertToRoman(num) { var romans = ["I", "V", "X", "L", "C", "D", "M"], ints = [], romanNumber = [], numeral = ""; while (num) { ints.push(num % 10); num = Math.floor(num/10); } for (i=0; i 看到![:point_right:](https://forum.freecodecamp.com/images/emoji/emoji_one/point_right.png?v=3 ":point_right:") [**`Wiki Challenge Solution Template`**](http://forum.freecodecamp.com/t/algorithm-article-template/14272)供参考。