Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

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
typedef 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
  1. - पायथन में रोमन से पूर्णांक

    मान लीजिए हमारे पास रोमन अक्षर हैं; हमें उन्हें पूर्णांक में बदलना है। जैसा कि हम जानते हैं रोमन अंक कुछ अलग प्रतीकों में दर्शाए जाते हैं: अंकमान I1 V5 X10 L50 C100 D500 M1000 यदि हम रोमन संख्याओं को ध्यान से देखें, तो यह ऐसा है जैसे अंक II है, तो यह 2 है, दो I एक साथ जुड़े हुए हैं। XII के लिए,

  1. - पायथन में पूर्णांक उल्टा करें

    मान लीजिए हमारे पास एक 32-बिट साइन्ड पूर्णांक संख्या है। हमें संख्या लेनी है और अंकों को उल्टा करना है। यदि संख्या 425 जैसी है, तो आउटपुट 524 होगा। एक और बात ध्यान रखनी है कि संख्या साइन्ड है, इसलिए कुछ ऋणात्मक संख्याएं हो सकती हैं। यदि संख्या -425 है, तो यह -524 होगी। यहां हमने कुछ मान्यताएं ली है

  1. - धनात्मक पूर्णांक के बिट्स को उल्टा करने के लिए पायथन प्रोग्राम

    समस्या विवरण सबसे पहले bin() फंक्शन का उपयोग करके संख्या को बाइनरी में बदलें। फिर बाइनरी प्रतिनिधित्व के पहले दो वर्ण छोड़ें क्योंकि bin() बाइनरी प्रतिनिधित्व में 0b प्रीफिक्स जोड़ता है और शेष भाग को उल्टा करें। फिर वर्ण से उल्टा करें जब तक बाएं से दूसरा अंतिम वर्ण न हो। उल्टे बाइनरी स्ट्रिंग को पूर