Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

จำนวนเต็มเป็นโรมันใน C


จากเลขทศนิยม n เราต้องแปลงเป็นเลขโรมัน ค่า n อยู่ในช่วง 1 ถึง 4000 ตัวเลขเหล่านี้เป็นตัวเลขโรมัน

Number
ตัวเลข
1
ฉัน
4
IV
5
V
9
IX
10
X
40
XL
50
L
90
XC
100
C
400
CD
500
D
900
CM
1000

4000
MMMM

ดังนั้นหากตัวเลข n =859 เลขโรมันจะเป็น DCCCLIX

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้

  • กำหนดอาร์เรย์เพื่อจัดเก็บตัวเลขและค่าที่สอดคล้องกันสำหรับรายการที่กำหนด ที่เรียกว่า nume array
  • เราใช้วิธีการแบบเรียกซ้ำ ฟังก์ชัน decToRom() ถูกใช้ นี่คือการนำ nume array และ number num.
  • decToRom() จะเป็นแบบ
  • ถ้า num ไม่ใช่ 0 แล้ว
    • max :=ค้นหาค่าสูงสุดจากอาร์เรย์ nume ที่ไม่เกิน num
    • เพิ่มค่าสำหรับ max นั้นลงในสตริงผลลัพธ์
    • num :=num – ค่าสูงสุด
    • 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++){//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