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] = ' '; 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; }