Bảng số la mã và một số quy tắc chuyển đổi. 1. Bảng số la mã I V X L C D M 1 5 10 50 100 500 1000 2. Quy tắc chuyển đổi a/ Số thập phân được cấu thành từ các chữ số đơn lẻ. Ví dụ: 1989 được ghép bởi 1,9,0,8. Còn đối với cách biểu diễn chữ số la mã thì mỗi chữ số khác 0 ở mỗi hàng ( hàng đơn vị, hàng chục, hàng trăm,…) sẽ được biểu diễn bởi 1 kí tự số la mã. 1000 = M, 900 = CM, 0 không được biểu diễn, 8 = VIII. 1908 = MCMVIII b/ “I”, “X”, “C”, “M” có thể được xuất hiện liên tiếp (cạnh nhau) tối đa 3 lần. Tuy nhiên, các kí tự này có thể xuất hiện nhiều hơn. (Ví dụ: XXXIX). Các kí tự “D”, “L”, “V” không được phép lặp lại. c/ Chữ số đi sau chữ số khác lớn hơn hoặc bằng thì cộng thêm vào: VI = V + I = 5 + 1 = 6 LX = L + X = 50 + 10 = 60 XX = X + X = 10 + 10 = 20 Chữ số đi trước chữ số khác lớn hơn thì trừ bớt đi: IV = V – I = 5 – 1 XL = L – X = 50 – 10 = 40 “I” chỉ có thể bị trừ bởi “V”, “X”. ( IV = V – I = 5 – 1 = 4, IX = X – I = 10 – 1 = 9) “X” chỉ có thể bị trừ bởi “C”, “L”. ( XC = 100 – 10 = 90, XL = 50 – 10 = 40) “C” chỉ có thể bị trừ bởi “D” và “M”. (CD = 500 – 100 = 400, CM = 1000) “V”, “L”, “D” không bao giờ bị trừ. d/ Nếu thêm 1 dấu gạch ngang trên đầu thì giá trị của nó bằng giá trị hiện tại nhân với 1000 CODE: Select All #include<stdio.h>#include<string.h>#include "stdlib.h"#include<conio.h>void main(){ int a[20], len, i = 0, j, k; char roman[20]; printf("Nhap day chu so La Ma(Note: chi su dung I,V,X,L,C,D,M): "); gets(roman); len = strlen(roman); for(i = 0; i < len; i++) { if(roman[i] == 'I') a[i] = 1; else if(roman[i] == 'V') a[i] = 5; else if(roman[i] == 'X') a[i] = 10; else if(roman[i] == 'L') a[i] = 50; else if(roman[i] == 'C') a[i] = 100; else if(roman[i] == 'D') a[i] = 500; else if(roman[i] == 'M') a[i] = 1000; else { printf("\nXin nhap lai day so la ma"); getch(); exit(1); } } k = a[len-1]; for(i = len-1; i > 0; i--) { if(a[i] > a[i-1]) k = k - a[i-1]; else if(a[i] == a[i-1] || a[i] < a[i-1]) k = k + a[i-1]; } printf("\nGia tri thap phan tuong ung la: %d ", k); getch();}