Computer >> Máy Tính >  >> Lập trình >> lập trình C

Số nguyên sang La Mã trong C

Cho một số thập phân n, chúng ta phải chuyển nó thành số La Mã. Giá trị n nằm trong khoảng từ 1 đến 4000. Đây là một số Chữ số La Mã.

Số
Numeral
1
Tô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

Vì vậy, nếu số n =859, Số La Mã của nó sẽ là DCCCLIX

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau

  • Xác định một mảng để lưu trữ các giá trị số và giá trị tương ứng cho danh sách đã cho. Đó được gọi là mảng số
  • chúng tôi đang sử dụng phương pháp đệ quy, hàm decToRom () được sử dụng. đây là lấy mảng số và số num.
  • DecToRom () sẽ giống như
  • nếu num không phải là 0, thì
    • max:=tìm giá trị lớn nhất từ ​​mảng số không lớn hơn num
    • nối giá trị cho giá trị tối đa đó vào chuỗi kết quả
    • num:=num - giá trị tối đa
    • decToRom (số, số)

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#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");
}

Đầu vào

570
3574

Đầu ra

DLXX
MMMDLXXIV