【问题标题】:Can a number be Romanised this way?数字可以这样罗马化吗?
【发布时间】:2017-01-21 14:27:03
【问题描述】:

我知道罗马化数字有几种不同的方法,但我正在尝试自己编造,想知道这种方法是否可行。

每次迭代都会返回 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));

【问题讨论】:

  • 改用j + array[i]。呃。 array[i] 是一个字符串,做你想做的事最好使用location = 10*j + Number(array[i])
  • 你真的真的应该在你的函数中声明(并初始化)arrayresult。否则当你第二次调用它时它会造成严重破坏。
  • for (var i = 0, j = 0; i &lt; array.length; i++, j += 10) { var location = array[i] + j; result = result.concat(roman[location]); console.log(location,result) } 会给你一些想法
  • 谢谢大家的建议。实际上,问题在于包含字符串而不是实际数字的数组。使用 Number() 或 parseInt() 将数组转换回整数来修复它。还要感谢您提供有关范围的提示。

标签: javascript arrays for-loop


【解决方案1】:

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

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));

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 2020-12-07
    相关资源
    最近更新 更多