I have a project due tonight where I have to convert integers to Roman Numerals.
The problem I have with my current code is that the flow is a little bit off, integers greater than 1000 have been causing me an issue, it has been printing the wrong output.
For example, to convert the integer 1192 to Roman Numearls, the correct output would be:
MCXCII
#include <iostream>
#include <string>
usingnamespace std;
int main()
{
int number;
int test;
char play;
do
{
string roman = "";
cout << "Please enter an integer you would like to convert" << endl;
cin >> number;
if (number >= 4000 || number <= 0)
{
cout << "That is an invalid integer" << endl;
}
else
{
if (number >= 1000)
{
test = (number / 1000);
for (int i = 0; i < test; i ++)
{
roman += 'M';
}
number %= 1000;
}
if ( number >= 100)
{
test = (number / 100);
if ( test == 9 )
{
roman += "CM";
}
elseif ( test >= 5)
{
roman += 'D';
for (int i = 0; i < test; i ++)
{
roman += 'C';
test -= 5;
}
}
elseif (test == 4)
{
roman += "CD";
}
elseif ( test >= 1)
{
for (int i = 0; i < test; i ++ )
{
roman += 'C';
}
}
number %= 100;
}
if (number >= 10)
{
test = (number / 10);
if (test == 9 )
{
roman += "IX";
}
elseif ( test >= 5 )
{
roman += 'L';
for (int i = 0; i < test; i++)
{
roman += 'X';
test =- 5;
}
}
if (test == 4)
{
roman += "XL";
}
elseif (test >= 1)
{
for (int i = 0; i < test; i ++)
{
roman += 'X';
}
}
number %= 10;
}
if (number >= 1)
{
test = number;
if (test == 9)
{
roman += "IX";
}
elseif (test >= 5)
{
roman += 'V';
for (int i = 0; i < test; i++)
{
roman += 'I';
test -= 5;
}
}
elseif ( test == 4)
{
roman += 'IV';
}
elseif (test >= 1)
{
for (int i = 0; i < test; i++)
{
roman += 'I';
}
}
}
cout << "Roman Numeral: " << roman << endl;
cout << "Would you like to convert another integer? (Y/N)" << endl;
cin >> play;
}
}while (play !='N' && play != 'n');
cout << "Thank you for playing" << endl;
system ("PAUSE");
return 0;
}