একটি ডেসিমেল নম্বর n দেওয়া আছে, আমাদের এটি রোমান নম্বরে কনভার্ট করতে হবে। n-এর মান ১ থেকে ৪০০০ পর্যন্ত। কিছু রোমান নম্বর নিচে দেওয়া হলো।
| নম্বর |
নিউমারেল |
|---|---|
| ১ |
I |
| ৪ |
IV |
| ৫ |
V |
| ৯ |
IX |
| ১০ |
X |
| ৪০ |
XL |
| ৫০ |
L |
| ৯০ |
XC |
| ১০০ |
C |
| ৪০০ |
CD |
| ৫০০ |
D |
| ৯০০ |
CM |
| ১০০০ |
M |
| ৪০০০ |
MMMM |
তাই যদি n = 859 হয়, তবে এর রোমান নম্বর হবে DCCCLIX
এটি সমাধান করতে, আমরা নিচের ধাপগুলো অনুসরণ করব
- দেওয়া লিস্টের জন্য নিউমারেল এবং সংশ্লিষ্ট ভ্যালু স্টোর করার জন্য একটি অ্যারে ডিফাইন করুন। এটাকে nume অ্যারে বলা হয়
- আমরা একটি রিকারসিভ পদ্ধতি ব্যবহার করছি, decToRom() ফাংশনটি ব্যবহৃত হয়। এটি nume অ্যারে এবং নম্বর num নেয়।
- decToRom() হবে নিচের মতো
- যদি num ০ না হয়, তবে
- max := nume অ্যারেতে থেকে সে সর্বোচ্চ ভ্যালু খুঁজুন যা num-এর চেয়ে বড় নয়
- সেটিmax-এর জন্য রেজাল্ট স্ট্রিং-এ সেই ভ্যালু অ্যাপেন্ড করুন
- num := num − max ভ্যালু
- decToRom(nume, 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++){//অ্যারেতে ১৫টি নিউমারেল
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