C 中的整數轉羅馬數字


給定一個十進位制數 n,我們必須將其轉換為羅馬數字。n 的值在 1 到 4000 之間。以下是一些羅馬數字:

數字
羅馬數字
1
I
4
IV
5
V
9
IX
10
X
40
XL
50
L
90
XC
100
C
400
CD
500
D
900
CM
1000
M
4000
MMMM

因此,如果數字 n = 859,則其羅馬數字為 DCCCLIX

要解決此問題,我們將執行以下步驟

  • 定義一個數組來儲存給定列表的數字和對應值。這稱為 nume 陣列
  • 我們正在使用遞迴方法,使用函式 decToRom()。這正在獲取 nume 陣列和數字 num。
  • decToRom() 將如下所示
  • 如果 num 不為 0,則
    • max := 從 nume 陣列中查詢不比 num 大的最大值
    • 將該 max 的值追加到結果字串中
    • num := num – max 值
    • decToRom(nume, num)

示例

讓我們檢視以下實現,以更好地理解−

#include<stdio.h>
typedef struct{
   char *sym;
   int val;
}numeral;
int maxNume(numeral *nu, int num){
   int i, index;
   for(i = 0; i<15; i++){//15 numerals in array
      if(nu[i].val <= num)
         index = i;
   }
   //gretest value numeral index, not greater than number
   return index;
}
void decToRoman(numeral *nu, int num){
   int max;
   if(num != 0){
      max = maxNume(nu, num);
      printf("%s", nu[max].sym);
      num -= nu[max].val;//decrease number
      decToRoman(nu, num);//recursively print numerals
   }
}
main(){
   int number;
   numeral nume[15] = {{"I",1},{"IV",4},{"V",5},{"IX",9}, {"X",10},{"XL",40},{"L",50},{"XC",90},
{"C",100},{"CD",400},{"D",500},{"CM",900},{"M",1000},{"MMMM",4000},{"V'",5000}};
   printf("Enter a decimal number: ");
   scanf("%d", &number);
   if(number >0 && number <= 5000){//checking input number
      printf("The Roman equivalent of %d is ", number);
      decToRoman(nume, number);
   }
   else{
      printf("Invalid Input");
   }
   printf("
"); }

輸入

570
3574

輸出

DLXX
MMMDLXXIV

更新於:27-Apr-2020

6K+ 次瀏覽

開啟你的 職業 新篇章

完成課程獲得證書

開始
廣告
© . All rights reserved.