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;
}