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:
/***********Convert roman number to decimal number*********** * Author: vncoding * Date : 18/07/2014 *************************************************************/ #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(); }
Kết quả:
Nhap day chu so La Ma(Note: chi su dung I,V,X,L,C,D,M): VIM Gia tri thap phan tuong ung la: 1004
Leave a Reply