एक दशमलव संख्या 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 होगा
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे
- दी गई सूची के लिए अंक और संबंधित मानों को संग्रहीत करने के लिए एक सरणी परिभाषित करें। इसे संख्या सरणी कहा जाता है
- हम एक पुनरावर्ती दृष्टिकोण का उपयोग कर रहे हैं, फ़ंक्शन decToRom() का उपयोग किया जाता है। यह संख्या सरणी और संख्या संख्या ले रहा है।
- decToRom() जैसा होगा
- यदि संख्या 0 नहीं है, तो
- अधिकतम:=संख्या सरणी से अधिकतम मान ज्ञात करें जो संख्या से बड़ा नहीं है
- उस अधिकतम के लिए परिणाम स्ट्रिंग में मान जोड़ें
- संख्या:=संख्या – अधिकतम मान
- decToRom(num, 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("\n"); }
इनपुट
570 3574
आउटपुट
DLXX MMMDLXXIV