একটি দশমিক সংখ্যা 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(সংখ্যা, সংখ্যা)
উদাহরণ
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
#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