将正整数转换为罗马数字的 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),因为除了输入大小外,我们还使用了固定数量的额外空间。
Learn JavaScript in-depth with real-world projects through our JavaScript certification course. Enroll and become a certified expert to boost your career.
使用递归
递归是一种编程方法,其中函数调用自身来解决给定的问题,是另一种在本文中实现上述逻辑的方法。
示例
下面的 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