将正整数转换为罗马数字的 JavaScript 程序

javascriptweb developmentfront end technologyobject oriented programming更新于 2024/12/9 8:44:17

在给定的问题中,我们必须将给定的正数(数字应该是整数)更改为相应的罗马数字,然后使用 Javascript 实现代码。

理解问题

我们必须编写一个 Javascript 程序来生成给定问题陈述中给定整数的罗马数字表示。代码应该接受正整数作为输入,并能够将整数转换为其等效的罗马数字。例如:假设我们有一个整数 5,因此这里 5 是输入整数,而罗马数字 5 的输出将是 V。

给定问题的逻辑

在程序中,我们将定义一个将整数转换为罗马数字的函数,该函数将以正整数作为输入,并将相应的罗马数字作为字符串返回。它将使用一个对象数组将整数映射到罗马数字。该函数将遍历该数组。迭代过程将从最大值开始到最小值,然后我们将相应的符号附加到罗马数字字符串。

算法

步骤 1:此算法的起点是声明一个将整数转换为罗马数字的函数。并将其命名为 intToRoman,并在函数内部传递一个整数作为参数。

步骤2:声明函数后,我们将检查条件,如果给定的数字小于或等于 0 且大于或等于 3999,则给出消息"无效数字"。

步骤 3:在函数内部,我们将定义罗马符号以获取引用。

步骤 4:定义一个变量来存储罗马数字。并将其初始化为零。

步骤 5:使用 for 循环遍历罗马符号。

步骤 6:在 for 循环中,我们将使用 while 循环来检查给定的数字是否大于或等于罗马符号的当前值。

步骤 7:如果给定的数字大于或等于当前值,则函数将相应的符号附加到罗马数字字符串并从给定的输入数字中减去该值。

步骤 8:此过程将运行,直到给定的输入数字小于当前值。

步骤 9:循环完成后,程序将生成输入数字的罗马数字表示。

示例

//将整数转换为罗马数字的函数
function intToRoman(num) {
   if (typeof num !== 'number' || num <= 0 || num > 3999) {
      return 'Invalid number. Please enter a positive integer between 1 and 3999.';
   }

   const romanSymbols = [
      { value: 1000, symbol: 'M' },
      { value: 900, symbol: 'CM' },
      { value: 500, symbol: 'D' },
      { value: 400, symbol: 'CD' },
      { value: 100, symbol: 'C' },
      { value: 90, symbol: 'XC' },
      { value: 50, symbol: 'L' },
      { value: 40, symbol: 'XL' },
      { value: 10, symbol: 'X' },
      { value: 9, symbol: 'IX' },
      { value: 5, symbol: 'V' },
      { value: 4, symbol: 'IV' },
      { value: 1, symbol: 'I' }
   ];

   let romanNumber = '';

   for (let i = 0; i < romanSymbols.length; i++) {
      while (num >= romanSymbols[i].value) {
      romanNumber += romanSymbols[i].symbol;
      num -= romanSymbols[i].value;
      }
   }

   return romanNumber;
}

console.log("The roman numbers for the given integers")
console.log(intToRoman(-10));
console.log(intToRoman(46));
console.log(intToRoman(1995));
console.log(intToRoman(5000));

输出

The roman numbers for the given integers
Invalid number. Please enter a positive integer between 1 and 3999.
XLVI
MCMXCV
Invalid number. Please enter a positive integer between 1 and 3999.

复杂度

代码的时间复杂度为线性 O(n)。其中 n 是输入数字。因为代码遍历罗马符号数组一次,而罗马符号的长度固定为 13。迭代次数取决于输入数字的值。因此,在最坏的情况下,迭代次数将为 13,因此时间复杂度将为 O(n)。

代码的空间复杂度为常数 O(1),因为我们除了输入大小之外还使用了固定数量的额外空间。我们在代码中使用的变量需要恒定数量的空间来存储它们的值。

结论

我们实现的代码是一种将整数转换为其对应罗马数字的简单方法。它遵循一种简单的算法,该算法遍历一组预定义的罗马符号并将相应的符号附加到结果数字字符串,同时从输入数字中减去它们的值。代码还通过检查给定输入数字的范围来处理输入验证。考虑边缘情况以确保其正确性并处理任何潜在错误始终很重要。


相关文章


有用资源