Thuật toán
- Đọc chuỗi số La Mã.
- Chuyển mỗi ký tự thành giá trị: I=1, V=5, X=10, L=50, C=100, D=500, M=1000.
- Duyệt mảng giá trị: nếu giá trị hiện tại nhỏ hơn giá trị tiếp theo thì trừ, ngược lại thì cộng.
Chương trình C
#include <stdio.h>
#include <string.h>
main() {
char roman[30];
int deci = 0, length, i, d[30];
printf("Bảng chuyển đổi:\n");
printf("1 -> I\n5 -> V\n10 -> X\n50 -> L\n100 -> C\n500 -> D\n1000 -> M\n");
printf("Nhập số La Mã: ");
scanf("%s", roman);
length = strlen(roman);
for (i = 0; i < length; i++) {
switch (roman[i]) {
case 'm': case 'M': d[i] = 1000; break;
case 'd': case 'D': d[i] = 500; break;
case 'c': case 'C': d[i] = 100; break;
case 'l': case 'L': d[i] = 50; break;
case 'x': case 'X': d[i] = 10; break;
case 'v': case 'V': d[i] = 5; break;
case 'i': case 'I': d[i] = 1; break;
}
}
for (i = 0; i < length; i++) {
if (i == length - 1 || d[i] >= d[i+1])
deci += d[i];
else
deci -= d[i];
}
printf("Giá trị thập phân của %s là %d\n", roman, deci);
}
Kết quả
Nhập số La Mã: M
Giá trị thập phân của M là 1000