दिया गया एक दशमलव संख्या 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)
उदाहरण
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें -
#includetypedef struct{ char *sym; int val; }numeral; int maxNume(numeral *nu, int num){ int i, index; for(i = 0; i<15; i++){//एरे में 15 न्यूमरल्स if(nu[i].val <= num) index = i; } //सबसे बड़ी वैल्यू न्यूमरल इंडेक्स, संख्या से अधिक नहीं 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;//संख्या घटाएं decToRoman(nu, num);//रिकर्सिवली न्यूमरल्स प्रिंट करें } } 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){//इनपुट नंबर चेक करना printf("The Roman equivalent of %d is ", number); decToRoman(nume, number); } else{ printf("Invalid Input"); } printf("\n"); }
इनपुट
570 3574
आउटपुट
DLXX MMMDLXXIV