一个数字可以这样罗马化吗?

时间:2017-01-21 14:27:03

标签: javascript arrays for-loop

我知道有一些不同的方法来罗马化一个数字,但是我正在努力弥补自己,并且想知道这种方法是否可行。

它为每次迭代返回Null,我似乎无法看到我在这里缺少的东西。任何帮助将不胜感激!

var array;
var result = [];

function convertToRoman(num) {
  array = num.toString().split('').reverse();

  roman = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX",
    "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC",
    "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"
  ];

  for (i = 0, j = 0; i < array.length; i++, j += 10) {
    var location = array[i] + j;
    result = result.concat(roman[location]);
  }

  return result.reverse().join();
}

console.log(convertToRoman(123));

1 个答案:

答案 0 :(得分:2)

由于array包含字符串,因此在算术中使用它们时必须将它们解析回整数。这是一个可能的解决方案:

&#13;
&#13;
var roman = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX",
  "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC",
  "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"
];

function convertToRoman(num) {
  var result = [];
  var array = num.toString().split('').reverse();

  for (i = 0, j = 0; i < array.length; i++, j += 10) {
    var location = parseInt(array[i]) + j;
    result.push(roman[location]);
  }

  return result.reverse().join('');
}

console.log(convertToRoman(123));
&#13;
&#13;
&#13;

请注意,我对array.push()的变量范围和使用做了一些更改。我也没有尝试过多次输入的方法。但是让算法正确不是你问题的一部分