#include <iostream>using namespace std;// Definition of functionconst char *Number_AsRomanString( int iNumber );int main (void){ int arabicalNumeral = 1; int result; cout<<"Please enter the number: "<<endl; // Validation if (cin>>result && result < 3000) { // Display of result cout<<endl<<Number_AsRomanString( result )<<endl; } else { cout<<"Limit the number up to 3000 or invalid input!"<<endl; } // Stop of process system("pause");return 0;}// Functionconst char *Number_AsRomanString( int iNumber ){ // Definition of struct struct RomanDigit_t { char *m_psString; int m_iValue; }; // Initialization of object struct static const RomanDigit_t RomanDigits[]= { {"M", 1000}, {"D", 500}, {"C", 100}, {"L", 50}, {"X", 10}, {"V", 5}, {"I", 1}, }; static char sRomanString[20]; sRomanString[0] = '\0'; for (int i=0; iNumber && i<sizeof(RomanDigits)/sizeof(RomanDigits[0]); i++) { switch(i) { case 0: { while(RomanDigits[0].m_iValue <= iNumber ) { strcat( sRomanString, RomanDigits[0].m_psString ); iNumber -= RomanDigits[0].m_iValue; } while((RomanDigits[0].m_iValue-RomanDigits[2].m_iValue) <= iNumber ) { strcat( sRomanString, RomanDigits[2].m_psString ); strcat( sRomanString, RomanDigits[0].m_psString ); iNumber -= RomanDigits[0].m_iValue-RomanDigits[2].m_iValue; } break; } case 1: { while(RomanDigits[1].m_iValue <= iNumber ) { strcat( sRomanString, RomanDigits[1].m_psString ); iNumber -= RomanDigits[1].m_iValue; } while((RomanDigits[1].m_iValue-RomanDigits[2].m_iValue) <= iNumber ) { strcat( sRomanString, RomanDigits[2].m_psString ); strcat( sRomanString, RomanDigits[1].m_psString ); iNumber -= RomanDigits[1].m_iValue-RomanDigits[2].m_iValue; } break; } case 2: { while(RomanDigits[2].m_iValue <= iNumber ) { strcat( sRomanString, RomanDigits[2].m_psString ); iNumber -= RomanDigits[2].m_iValue; } while((RomanDigits[2].m_iValue-RomanDigits[4].m_iValue) <= iNumber ) { strcat( sRomanString, RomanDigits[4].m_psString ); strcat( sRomanString, RomanDigits[2].m_psString ); iNumber -= RomanDigits[2].m_iValue-RomanDigits[4].m_iValue; } break; } case 3: { while(RomanDigits[3].m_iValue <= iNumber ) { strcat( sRomanString, RomanDigits[3].m_psString ); iNumber -= RomanDigits[3].m_iValue; } while((RomanDigits[3].m_iValue-RomanDigits[4].m_iValue) <= iNumber ) { strcat( sRomanString, RomanDigits[4].m_psString ); strcat( sRomanString, RomanDigits[3].m_psString ); iNumber -= RomanDigits[3].m_iValue-RomanDigits[4].m_iValue; } break; } case 4: { while(RomanDigits[4].m_iValue <= iNumber ) { strcat( sRomanString, RomanDigits[4].m_psString ); iNumber -= RomanDigits[4].m_iValue; } while((RomanDigits[4].m_iValue-RomanDigits[6].m_iValue) <= iNumber ) { strcat( sRomanString, RomanDigits[6].m_psString ); strcat( sRomanString, RomanDigits[4].m_psString ); iNumber -= RomanDigits[4].m_iValue-RomanDigits[6].m_iValue; } break; } case 5: { while(RomanDigits[5].m_iValue <= iNumber ) { strcat( sRomanString, RomanDigits[5].m_psString ); iNumber -= RomanDigits[5].m_iValue; } while((RomanDigits[5].m_iValue-RomanDigits[6].m_iValue) <= iNumber ) { strcat( sRomanString, RomanDigits[6].m_psString ); strcat( sRomanString, RomanDigits[5].m_psString ); iNumber -= RomanDigits[5].m_iValue-RomanDigits[6].m_iValue; } break; } case 6: { while(RomanDigits[6].m_iValue <= iNumber ) { strcat( sRomanString, RomanDigits[6].m_psString ); iNumber -= RomanDigits[6].m_iValue; } break; } default: { break; } } } return sRomanString;}
Comments