# Converting Decimal Numbers to Roman Numerals

Tuesday Jul 29th 2003 by Ste Cork

Homework assignment: A simple solution for converting to Roman Numerals.

Environment: C, Visual C++

The following function takes positive decimal numbers from 0–4999 and outputs them as Roman strings (for example, "MMIII" for 2003). It should compile under any version of C on any platform (although you may want to change "//" comments to the "/*...*/" form (which I hate).

I wrote the function myself, and I have no copyright concerns. I searched the CodeGuru site for "roman" and got nothing except font names, so I assume noone else has posted anything similar to this.

```// written by Ste Cork, free for any and all use.
//
const char *Number_AsRomanString( int iNumber )
{
struct RomanDigit_t
{
char *m_psString;
int m_iValue;
};

static const RomanDigit_t RomanDigits[]=
{
{"M",  1000},
{"CM",  900},
{"D",   500},
{"CD",  400},
{"C",   100},
{"XC",   90},
{"L",    50},
{"XL",   40},
{"X",    10},
{"IX",    9},
{"V",     5},
{"IV",    4},
{"I",     1},
};

// Strictly speaking, Roman digits can't display something
// such as 4999 without using overlaid bars and so forth,
// but for now this is a quick-and-dirty piece of code that'll
// just keep using M's...
//
static char sRomanString[20];
sRomanString[0] = '\0';

for (int i=0; iNumber && i<sizeof(RomanDigits)/
sizeof(RomanDigits[0]); i++)
{
while ( RomanDigits[i].m_iValue <= iNumber )
{
strcat( sRomanString, RomanDigits[i].m_psString );
iNumber -= RomanDigits[i].m_iValue;
}
}

return sRomanString;
}
```
Home
Mobile Site | Full Site