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


我们必须编写一个 JavaScript 程序来生成给定整数的罗马数字表示形式。代码应接受一个正整数作为输入,并能够将其转换为等效的罗马数字。

示例场景

Input: num = 10;
Output: roman_num = X

如何将整数转换为罗马数字

为了解决给定的问题,定义一个 函数 将整数转换为罗马数字。此函数将接收一个正整数作为输入,并返回相应的罗马数字字符串。它将使用一个对象数组将整数映射到罗马数字。

定义的函数将遍历数组。迭代过程将从最大值到最小值开始。在每次迭代中,它将检查给定数字是否大于或等于罗马符号的当前值。如果是,则该函数将相应符号附加到罗马数字字符串中,并从给定的输入数字中减去该值。此过程将持续运行,直到给定的输入数字小于当前值。循环完成后,程序将生成输入数字的罗马数字表示形式。

使用 for 循环

在这种方法中,我们使用 for 循环实现上述讨论的逻辑。在 JavaScript 中,for 循环 用于重复执行一段代码,直到指定条件计算结果为 false。当迭代次数固定且已知时,使用此循环。

示例

一个 JavaScript 程序,演示了如何使用 for 循环将正整数转换为罗马数字。

//function for converting integer to roman
function intToRoman(num) {
   if (typeof num !== 'number' || num <= 0 || num > 3999) {
      return 'Invalid number';
   }

   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
XLVI
MCMXCV
Invalid number

复杂度

代码的时间复杂度为线性 O(n),其中 n 为输入数字。代码的空间复杂度为常数 O(1),因为除了输入大小外,我们还使用了固定数量的额外空间。

使用递归

递归是一种编程方法,其中函数调用自身来解决给定的问题,是另一种在本文中实现上述逻辑的方法。

示例

下面的 JavaScript 程序使用递归将正整数转换为罗马数字。

function intToRoman(num, romanNumber = '', i = 0) {
   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' }
   ];

   if (typeof num !== 'number' || num < 0 || num > 3999) {
      return 'Invalid number';
   }
   if (num === 0) {
      return romanNumber;
   }

   while (num >= romanSymbols[i].value) {
      romanNumber += romanSymbols[i].symbol;
      num -= romanSymbols[i].value;
   }
   // recursive call
   return intToRoman(num, romanNumber, i + 1);
}

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
XLVI
MCMXCV
Invalid number

更新于: 2024-09-30

536 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.