Cyfry Rzymskie

0

Witam, czy znacie lepszy sposób na konwersje z systemu arabskiego na rzymski,
moglibyście sprawdzić czy mój kod nie wysypie się na różnych przykładach progowych:

 void rzymskie()
{
	char akcja='t';
	do
	{
		cout<<"Czy chcesz wprowadzić cyfrę arabską"<<endl;
		cout<<"(naciśnij klawisz t/T, jeśli tak lub n/N jeśli nie)?"<<endl;
		cin>>akcja;
		int arabska;
		string rzymska;
		if(akcja=='t' || akcja=='T')
		{
			cin>>arabska;
			do
			{
				if(arabska>=1000)
				{
					arabska=arabska-1000;
					rzymska=rzymska+"M";
					continue;
				}
				if(arabska>=500)
				{
					arabska=arabska-500;
					rzymska=rzymska+"D";
					continue;
				}
				if(arabska>=400)
				{
					arabska=arabska-400;
					rzymska=rzymska+"CD";
					continue;
				}
				if(arabska>=100)
				{
					arabska=arabska-100;
					rzymska=rzymska+"C";
					continue;
				}
				if(arabska>=90)
				{
					arabska=arabska-90;
					rzymska=rzymska+"XC";
					continue;
				}
				if(arabska>=50)
				{
					arabska=arabska-50;
					rzymska=rzymska+"L";
					continue;
				}
				if(arabska>=40)
				{
					arabska=arabska-40;
					rzymska=rzymska+"XL";
					continue;
				}
				if(arabska>=10)
				{
					arabska=arabska-10;
					rzymska=rzymska+"X";
					continue;
				}
				if(arabska>=5)
				{
					arabska=arabska-5;
					rzymska=rzymska+"V";
					continue;
				}
				if(arabska>=4)
				{
					arabska=arabska-4;
					rzymska=rzymska+"IV";
					continue;
				}
				if(arabska>=1)
				{
					arabska=arabska-1;
					rzymska=rzymska+"I";
					continue;
				}
			}while(!arabska==0);
			cout<<rzymska<<endl;
		}
		if(akcja=='n' || akcja=='N')
		{

		}

		cout<<"Czy powtórzyć obliczenia"<<endl;
		cout<<"(naciśnij klawisz t/T, jeśli tak lub n/N jeśli nie)?"<<endl;
		cin>>akcja;
	}while(akcja!='n' && akcja!='N');
}
0

Wartości ujemne...

0

Nie rozumiem, w zadaniu któe rozwiązuję przygotowując się do konkursu jest napisane że cyfry są od 0 do 3000

0

Wybacz, lecz nie jestem medium.

1

jest lepszy sposób - tablice.
sprawdzanie

  1. wpisz cobie w excelu =RZYMSKIE(WIERSZ();0)
  2. rozciągnij to na zadaną ilość wierszy w twoim przypadku 6500
  3. dodaj dodatkową opcję aby wypisywało po kolei od 1 do 6500 w osobnym wierszu
  4. porównaj wyniki z excelem.
1
void rzymskie()
{
        char akcja='t';
        do
        {
                cout<<"Czy chcesz wprowadzić cyfrę arabską"<<endl;

Zgrzyt!

Nie mieszaj części "obliczeniowej" programu z interfejsem użytkownika.
Zrób funkcję

string rzymskie(unsigned int n)

która tylko przekształci inta na stringa z zapisem rzymskim, i jej potem używaj.

cout << rzymskie(arabska) << endl;
0
adam vip napisał(a):

w zadaniu któe rozwiązuję (...) jest napisane że cyfry są od 0 do 3000
Rzymianie nie znali zera :) Stąd i nie ma wieku zerowego :p

1 użytkowników online, w tym zalogowanych: 0, gości: 1