• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed JSUMRZYM - Zadanie ze spoja - problem na wejściu

0 głosów
281 wizyt
pytanie zadane 6 września 2020 w SPOJ przez magda_19 Gaduła (3,080 p.)
zamknięte 6 września 2020 przez magda_19

Rozwiązuję zadanie z serwisu SPOJ: https://pl.spoj.com/problems/JSUMRZYM/ Muszę użyć mapy. Po wpisaniu danych wejściowych program przestaje działać. Nie można wpisać innych danych, ani też nic się nie wyświetla. Czy problem dotyczy funkcji konwertujących, a może zamiany string na int?

#include <iostream>
#include <map>
#include <cstdlib>
#include <algorithm>
#include <string>

using namespace std;

const map < int, string > mapa {
    { 1000, "M" }, { 900, "CM" }, { 500, "D" }, { 400, "CD" }, { 100, "C" }, { 90, "XC" },
    { 50, "L" }, { 40, "XL" }, { 10, "X" }, { 9, "IX" }, { 5, "V" }, { 4, "IV" }, { 1, "I" }
};


int zRzymskiegoNaArabski (string liczba) {
    int dlugoscLiczby = liczba.size();
    int suma = 0;
    int i = 0;
    auto iter = mapa.rbegin();
    map <int, string> mapa;

    while (i < dlugoscLiczby) {
        if ((liczba[i] == iter -> second[0]) && (iter -> second.size() == 1)){
            suma += iter -> first;
            i++;
        }
        else if (i < dlugoscLiczby - 1 && liczba.substr (i, 2) == (++iter) -> second) {
            suma += iter -> first;
            i += 2;
            --iter;
        }
        else if (iter != mapa.rend()) {
            ++iter;
        }
    }

    return suma;
}

string zArabskiegoNaRzymski (int liczba) {
    string wynik = " ";
    auto iter = mapa.rbegin();

    while (liczba > 0) {
        if (liczba >= iter -> first) {
            liczba -= iter -> first;
            wynik += iter -> second;
        }
        else if (iter != mapa.rend()) {
            iter++;
        }
    }

    return wynik;

}

int main()
{
    string wynik;
    string liczbyRzymskie;
    std::string str = " ";
    int dlugosc, cyfra;

    do {
            getline (cin, liczbyRzymskie);

            liczbyRzymskie = str;

            zRzymskiegoNaArabski(liczbyRzymskie);

            cyfra = atoi(str.c_str());

            zArabskiegoNaRzymski(cyfra);

            wynik += cyfra;
            cout << cyfra;


    } while (cin.get() != '\n');


    return 0;
}

 

komentarz zamknięcia: Znalazłam błąd

Podobne pytania

0 głosów
0 odpowiedzi 176 wizyt
pytanie zadane 10 września 2020 w C i C++ przez magda_19 Gaduła (3,080 p.)
0 głosów
1 odpowiedź 308 wizyt
pytanie zadane 22 lutego 2021 w C i C++ przez Rainbow99 Początkujący (430 p.)
0 głosów
1 odpowiedź 481 wizyt
pytanie zadane 1 września 2020 w C i C++ przez magda_19 Gaduła (3,080 p.)

93,765 zapytań

142,720 odpowiedzi

323,369 komentarzy

63,359 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...