char *getOne(char c)
{
switch (c)
{
case '9':
return "IX";
case '8':
return "VIII";
case '7':
return "VII";
case '6':
return "VI";
case '5':
return "V";
case '4':
return "IV";
case '3':
return "III";
case '2':
return "II";
case '1':
return "I";
case '0':
return "";
default:
return NULL;
}
}
char *getTen(char c)
{
switch (c)
{
case '9':
return "XC";
case '8':
return "LXXX";
case '7':
return "LXX";
case '6':
return "LX";
case '5':
return "L";
case '4':
return "XL";
case '3':
return "XXX";
case '2':
return "XX";
case '1':
return "X";
case '0':
return "";
default:
return NULL;
}
}
char *getHundred(char c)
{
switch (c)
{
case '9':
return "CM";
case '8':
return "DCCC";
case '7':
return "DCC";
case '6':
return "DC";
case '5':
return "D";
case '4':
return "CD";
case '3':
return "CCC";
case '2':
return "CC";
case '1':
return "C";
case '0':
return "";
default:
return NULL;
}
}
char *getThousand(char c)
{
switch (c)
{
case '3':
return "MMM";
case '2':
return "MM";
case '1':
return "M";
default:
return NULL;
}
}
char *intToRoman(int num)
{
int length;
char number[5];
char *s = malloc(16 * sizeof(char));
sprintf(number, "%i", num);
length = strlen(number);
switch (length)
{
case 4:
sprintf(s, "%s%s%s%s", getThousand(number[0]), getHundred(number[1]),
getTen(number[2]), getOne(number[3]));
break;
case 3:
sprintf(s, "%s%s%s", getHundred(number[0]), getTen(number[1]),
getOne(number[2]));
break;
case 2:
sprintf(s, "%s%s", getTen(number[0]), getOne(number[1]));
break;
case 1:
s = getOne(number[0]);
break;
default:
break;
}
return s;
}