Em đã viết được code và chạy ra kết quả đúng, nhưng không biết thuật giải có tối ưu chưa. Mong mấy huynh xem giúp ạ !
Code:
/*
IV: 4
V: 5
XL: 40
L: 50
XC: 90
C: 100
CD: 400
D: 500 1459 M CD L IX
M: 1000 //Max
MMMMM: 5000
*/
#include <stdio.h>
#include <conio.h>
void LaMa(int n);
void main()
{
int n=0;
clrscr();
do
{
printf("n= ");
scanf("%d",&n);
}
while(n<1);
printf("So La Ma: ");
LaMa(n);
getch();
}
void LaMa(int n)
{
switch(n)
{
case 40 : printf("IL "); break;
case 50 : printf("L "); break;
case 90 : printf("XC "); break;
case 100 : printf("C "); break;
case 400 : printf("CD ");break;
case 500 : printf("D "); break;
case 900 : printf("CM ");break;
default :
switch(n)
{
case 0 : break;
case 1 : printf("I"); break;
case 2 : printf("II"); break;
case 3 : printf("III"); break;
case 4 : printf("IV"); break;
case 5 : printf("V"); break;
case 6 : printf("VI"); break;
case 7 : printf("VII"); break;
case 8 : printf("VIII"); break;
case 9 : printf("IX"); break;
default:
if(n>1000 && n%1000!=0)
{ LaMa((n/1000)*1000); LaMa(n%1000); return;}
else if(n%1000==0)
for(int i=1; i<=n/1000; i++) printf("M ");
else if(n<1000 && n>900)
{ printf("CM "); LaMa(n-500); return;}
else if(n<900 && n>500)
{ printf("D "); LaMa(n-500); return;}
else if(n<500 && n>400)
{ printf("CD "); LaMa(n-400); return;}
else if(n<400 && n>100)
{ printf("C "); LaMa(n-100); return;}
else if(n<100 && n>50 && n!=90)
{ printf("L "); LaMa(n-50); return;}
else if(n<50 && n>10 && n!=40)
{ printf("X "); LaMa(n-10); return;}
}
}
}