Witam, mam małą komplikację w moim rozwiązaniu - przekształca mi ładnie liczby, ale jak przychodzi do przekształcenia np. 111 to dostaję sto dziesięć jeden zamiast sto jedenaście. Kombinowałem na różne sposoby ale jak na razie bez rezultatu :/

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

using namespace std;

int zamienLiczbeNaJejZapisSlowny(string liczba,vector <int> &liczby)
{
    int dlugosc = liczba.length();
    if ((dlugosc  == 2) || (dlugosc == 1))
    {
        int zmiana = atoi(liczba.c_str());
        liczby.push_back(zmiana);
    }
    else
    {
        do
        {
            string slowo = liczba.substr(dlugosc-3,dlugosc);
            liczba.erase(dlugosc-3,dlugosc);
            dlugosc -= 3;
            int zmiana = atoi(slowo.c_str());
            liczby.push_back(zmiana);
        }
        while(dlugosc > 2);
        if ((dlugosc  < 3) && (dlugosc >0))
        {
            int zmiana = atoi(liczba.c_str());
            liczby.push_back(zmiana);
        }
    }
}

int podajSlownyZapisLiczbyTrzycyfrowej(string liczba, vector <int> &liczby)
{
    map <int,string>::reverse_iterator ritr;
    map <int,string> inWords;
    inWords[1] = "jeden";
    inWords[2] = "dwa";
    inWords[3] = "trzy";
    inWords[4] = "cztery";
    inWords[5] = "piec";
    inWords[6] = "szesc";
    inWords[7] = "siedem";
    inWords[8] = "osiem";
    inWords[9] = "dziewiec";
    inWords[10] = "dziesiec";
    inWords[11] = "jedenascie";
    inWords[12] = "dwanascie";
    inWords[13] = "trzynascie";
    inWords[14] = "czternascie";
    inWords[15] = "pietnascie";
    inWords[16] = "szesnascie";
    inWords[17] = "siedemnascie";
    inWords[18] = "osiemnascie";
    inWords[19] = "dziewietnascie";
    inWords[20] = "dwadziescia";
    inWords[30] = "trzydziesci";
    inWords[40] = "czterdziesci";
    inWords[50] = "piecdziesiat";
    inWords[60] = "szczescdziesiat";
    inWords[70] = "siedemdziesiat";
    inWords[80] = "osiemdziesiat";
    inWords[90] = "dziewiecdziesiat";
    inWords[100] = "sto";
    inWords[200] = "dwiescie";
    inWords[300] = "trzysta";
    inWords[400] = "czterysta";
    inWords[500] = "piecset";
    inWords[600] = "szescset";
    inWords[700] = "siedemset";
    inWords[800] = "osiemset";
    inWords[900] = "dziewiecset";

    zamienLiczbeNaJejZapisSlowny(liczba,liczby);
    int wynik = 0;

    for(int i = liczby.size()-1; i >= 0; i--)
    {
        int mnoznik = 100;

        for (ritr = inWords.rbegin() ; ritr != inWords.rend() ; ritr++)

        if((liczby[i] == ritr -> first) || ((liczby[i] > 9) && (liczby[i] < 20)))
            {
                    cout << "liczby1 " <<ritr -> second << " ";
            }

        if(liczby[i] != ritr -> first)
        {
            do
            {
                wynik = (liczby[i] / mnoznik) * mnoznik;
                liczby[i] = liczby[i] - wynik;
                mnoznik /= 10;
                for (ritr = inWords.rbegin() ; ritr != inWords.rend() ; ritr++)
                {
                    if(wynik == ritr -> first)
                    {
                        cout << ritr -> second << " ";
                    }
                }
            }
            while(liczby[i] > 0);
        }


        if (i == 1)
        {
            cout << "tys. ";
        }
        if (i == 2)
        {
            cout << "mln. ";
        }
        if (i == 3)
        {
            cout << "mld. ";
        }
        if (i == 4)
        {
            cout << "bln. ";
        }

    }
    return wynik;
}

int main()
{
    vector <int> liczby;
    string liczba;
    int iloscTestow = 1;

    //cin >> iloscTestow;

    for (int i = 0; i < iloscTestow ; i++)
    {
        cin >> liczba;
        podajSlownyZapisLiczbyTrzycyfrowej(liczba,liczby);
    }
    return 0;
}