uczę się języka c++ napisałem i tak wymyśliłem ta funkcje wypisującą na ekran słownie podaną liczbę z przedziału -9999 do 9999
funkcja przesyła dziwne wartości lub i się zawiesza przy minusowych liczbach
najlepsze że napisałem najpierw cześć dla minusowych liczb później dla przekopiowałem i przebiłem na dodatnie i dla dodatnich działa a dla ujemnych nie:)
wiec nie wiem zbytnio co jest pięć
pewnie da się to napisać prościej ale chce się dowiedzieć dlaczego mój sposób nie działa
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
string zam_na_slownie(int licz);
int main()
{
cout<<"witaj Podaj Liczbe :";
int licz;
cin>>licz;
cout <<"\n\n o to przekowertowana liczba na tekst :\n"<<zam_na_slownie(licz);
}
//***************************************************************************************
string zam_na_slownie(int licz)
{
string jednosci[] = {"","jeden ","dwa ","trzy ","cztery ","pienc ","szejsc ","siedem ","osiem ","dziewiec "};
string jedynastki[] = {"","jedenascie ","dwanascie ","trzynascie ","czterynascie ","pientnascie ","szejsnascie ","siedemnascie ","osiemnascie ","dziewietnascie"};
string dziesiadki[] = {"","dziesienc" ,"dwadziescia ","trzydziesci ","czterydziesci ","piencdziesiand ","szejscdziesiand ","siedemdziesiand ","osiemdziesiand ","dziewiecdziesiand "};
string setki[] = {"","sto ","dwiescie ","trzysta ","czterysta ","piencset ","szejscset ","siedemset ","osiemset ","dziewiecset "};
string tysiance[] = {"","tysianc ","dwa tysiance ","trzy tysiance ","cztery tysiance ","pienc tysiency ","szejsc tysiency ","siedem tysiency ","osiem tysiency ","dziewiec tysiency "};
string pom,cyf;
ostringstream na_str;
na_str<<licz;
cyf=na_str.str();
if(0>licz)
{
licz=!licz;
switch( (int)cyf.size())
{
case 5:
pom+="minus "+tysiance[(int)licz/1000]+setki[(licz/100)%10];
if ((licz/10)%10 == 1 && licz%10 != 0)
{
pom+=jedynastki[licz%10];
}
else
{
pom+=dziesiadki[(licz/10)%10]+jednosci[licz%10];
}
break;
case 4:
pom+="minus "+setki[(licz/100)%10];
if ((licz/10)%10 == 1&&licz%10 != 0)
{
pom+=jedynastki[licz%10];
}
else
{
pom+=dziesiadki[(licz/10)%10]+jednosci[licz%10];
}
break;
case 3:
pom+="minus ";
if ((licz/10)%10 == 1&&licz%10 != 0)
{
pom+=jedynastki[licz%10];
}
else
{
pom+=dziesiadki[(licz/10)%10]+jednosci[licz%10];
}
break;
case 2:
pom += "minus "+jednosci[licz%10];
break;
}
}
else
{
switch( (int)cyf.size())
{
case 4:
pom+=tysiance[licz/1000]+setki[(licz/100)%10];
if ((licz/10)%10 == 1 && licz%10 != 0)
{
pom+=jedynastki[licz%10];
}
else
{
pom+=dziesiadki[(licz/10)%10]+jednosci[licz%10];
}
break;
case 3:
pom+= setki[(licz/100)%10];
if ((licz/10)%10 == 1&&licz%10 != 0)
{
pom+=jedynastki[licz%10];
}
else
{
pom+=dziesiadki[(licz/10)%10]+jednosci[licz%10];
}
case 2:
if ((licz/10)%10 == 1&&licz%10 != 0)
{
pom+=jedynastki[licz%10];
}
else
{
pom+=dziesiadki[(licz/10)%10]+jednosci[licz%10];
}
break;
case 1:
pom+=jednosci[licz];
break;
}
}
return pom;
}