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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP