একটি দশমিক সংখ্যা 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