Bảng số la mã và một số quy tắc chuyển đổi.
1. Bảng số la mã
1 2 |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
/***********Convert roman number to decimal number*********** #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ả:
1 2 |
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 |
I have noticed you don’t monetize your blog, don’t waste
your traffic, you can earn extra bucks every month because
you’ve got hi quality content. If you want to know how to make
extra money, search for: Boorfe’s tips best adsense alternative