將正整數轉換為羅馬數字的 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.