Converting Decimal Numbers to Roman Numerals
Posted
by Ste Cork
on July 29th, 2003
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; }

Comments
There are no comments yet. Be the first to comment!