#include <iostream>
#include <cstring>
using namespace std;

string Convert(int UserInput);
int NumOfDigits(int UserInput);
int FirstDigit(int UserInput);
int Power (int Base, int Exponent);

int main()
{
	char Answer = 'y';
	while (Answer=='y')
	{
		int UserInput = 0;
		while (true)
		{
			cout << "Please enter a number: "; cin >> UserInput;
			if ((UserInput > 0) && (UserInput < 4000)) break;
			cout << "Please enter a number between 1 and 3999" << endl;
		}
		cout << Convert(UserInput);
		cout << "\nDo you wish to convert another number?"; cin >> Answer;
	}
}

string Convert(int UserInput)
{
	if ((UserInput <1) || (UserInput > 3999)) return "Please give a number between 1 and 3999";
	string Roman = "";
	while (UserInput >0)
	{
		int TotalDigits = NumOfDigits(UserInput);
		int Token = FirstDigit(UserInput);	
		UserInput -= Token*Power(10, (TotalDigits-1));
		char Lower, Upper;
		
		if (TotalDigits == 4) {Lower = 'M';}
		else if(TotalDigits == 3) {Lower = 'C'; Upper = 'D';}
		else if(TotalDigits == 2) {Lower = 'X'; Upper = 'L';}
		else if(TotalDigits == 1) {Lower = 'I'; Upper = 'V';}
		
		if (Token<=3)
		{
			while (Token>0)
			{
				Token--;
				Roman += Lower;
			}
		}
		else if(Token==4)
		{
			Roman+=Lower+Upper;
		}
		else if(Token==9)
		{
			Roman+=Lower;
			if (Lower=='I'){Roman+='X';}
			else if (Lower=='X'){Roman+='C';}
			else if (Lower=='C'){Roman+='M';}
		}
		else if ((Token <=8) && (Token >4))
		{
			Roman += Upper;
			while (Token>5)
			{
				Token--;
				Roman += Lower;
			}
		}
	}
	return Roman;
}

int NumOfDigits(int UserInput)
{
	int TotalDigits = 0;
	while (UserInput>0)
	{
		UserInput /= 10;
		TotalDigits++;
	}
	return TotalDigits;
}
int FirstDigit(int UserInput)
{
	return UserInput/(Power(10,  (NumOfDigits(UserInput)-1)));
}

int Power (int Base, int Exponent)
{
	int Result = 1;
	while (Exponent>0)
	{
		Result *= Base;
		Exponent--;
	}
	return Result;
}