Inicjalizuj zmienne. Kropka.
Jakieś takie uwagi dla polepszenia kodu w trosce o mój komfort i zdrowie psychiczne innych użytkowników forum:
- Formatuj czytelnie kod3
- Włącz i czytaj ostrzeżenia kompilatora (rozwiązują większość problemów początkujących, a nawet zaawansowanych programistów)
-
<string.h>
to zdeprecjonowany nagłówek dla funkcji typustrcpy
,strlen
z języka C (<cstring>
dla C++). Natomiast chyba chciałeś dołączyć po prostu<string>
dla klasystd::string
. - Popracuj nad nazewnictwem zmiennych. Jak widzę “LiteraRzymska” to nie wiem z czym mam do czynienia.
- Wypełnianie mapy w funkcji przy każdym jej użyciu jest strasznie czasochłonne. Wystarczy zrobić to raz
- Nie musiałbyś dekrementować iteratorów gdybyś użył funkcji
rbegin()
/rend()
(uwaga zwracająreverse_iterator
!).
Super pomysł z linkiem formatera. Nigdy nie potrzebowałem dla siebie, ale aby chociaż spojrzeć na cudze kody to chyba stanie się mój niezbędnik. Wiem, że takich narzędzi jest bez liku [dobre IDE chyba mają wbudowane] ale naprawdę nie potrzebowałem i nie używałem. Aż nie mogłem się powstrzymać i nie wkleić przeformatowanego [styl LLVM] kodu:
#include <string.h>
#include <map>
#include <iostream>
using namespace std;
int ZamianaRzymskieNaArabskie(string LiteraRzymska) {
map<char, int> wartosci;
int DlogoscLiczby, wynik, WartoscPojedynczejCyfry, OstatniaWartosc;
wartosci['I'] = 1;
wartosci['V'] = 5;
wartosci['X'] = 10;
wartosci['L'] = 50;
wartosci['C'] = 100;
wartosci['D'] = 500;
wartosci['M'] = 1000;
DlogoscLiczby = LiteraRzymska.length();
for (DlogoscLiczby; DlogoscLiczby >= 0; DlogoscLiczby--) {
WartoscPojedynczejCyfry = wartosci[LiteraRzymska[DlogoscLiczby]];
if (WartoscPojedynczejCyfry >= OstatniaWartosc) {
OstatniaWartosc = WartoscPojedynczejCyfry;
wynik += WartoscPojedynczejCyfry;
} else
wynik -= WartoscPojedynczejCyfry;
}
return wynik;
}
string ZamianaArabskaNaRzymska(int arabskaWejsciowa)
{
map<int, string> liczbaArabskaRzymska;
string liczbaRzymska = "";
liczbaArabskaRzymska[1] = "I";
liczbaArabskaRzymska[4] = "IV";
liczbaArabskaRzymska[5] = "V";
liczbaArabskaRzymska[9] = "IX";
liczbaArabskaRzymska[10] = "X";
liczbaArabskaRzymska[40] = "XL";
liczbaArabskaRzymska[50] = "L";
liczbaArabskaRzymska[90] = "XC";
liczbaArabskaRzymska[100] = "C";
liczbaArabskaRzymska[400] = "CD";
liczbaArabskaRzymska[500] = "D";
liczbaArabskaRzymska[900] = "CM";
liczbaArabskaRzymska[1000] = "M";
map<int, string>::iterator koniec = --liczbaArabskaRzymska.end();
map<int, string>::iterator poczatek = --liczbaArabskaRzymska.begin();
for (koniec; koniec != poczatek; koniec--) {
while (arabskaWejsciowa % koniec->first < arabskaWejsciowa) {
liczbaRzymska += koniec->second;
arabskaWejsciowa -= koniec->first;
}
}
return liczbaRzymska;
}
int main() {
string LiteraRzymska;
string LiteraRzymska2;
while (cin >> LiteraRzymska >> LiteraRzymska2) {
int suma = ZamianaRzymskieNaArabskie(LiteraRzymska) +
ZamianaRzymskieNaArabskie(LiteraRzymska2);
cout << ZamianaArabskaNaRzymska(suma);
cout << endl;
}
}
To nie załatwia fatalnie dobrany nazw zmiennych i funkcji oraz braku testów na ideone.
Warto też przeczytać podstawowe wskazówki: Jeśli zaczynasz, przeczytaj koniecznie! <--kliknij w to proszę!
2 years later
Suggested Topics
Topic | Category | Replies | Views | Activity |
---|---|---|---|---|
MBPROB01 - History version in plaintext pl.spoj.com | Zbiór zadań | 6 | 150 | Jul '24 |
FR_20_02 - Poszukiwacze skarbów - Błąd w testach? | Zbiór zadań | 1 | 74 | Apr 2 |
PP0504B - StringMerge - w języku C | Zbiór zadań | 5 | 183 | Jun '24 |
TFRACAL - Kalkulator ułamków | Zbiór zadań | 2 | 124 | Feb 1 |
TOPSORTL - Porządek leksykograficzny w grafie | Zbiór zadań | 3 | 125 | Jul '24 |