Mam problem z pewnym zadaniem ze SPOJa. Dla wszystkich przypadków, które sprawdziłem, działa poprawnie. Mimo to SPOJ nadal jest nieugięty
#include <iostream>
#include <string>
using namespace std;
int t, licznik, zero;
string liczba;
int main()
{
cin>>t;
for(int i=0; i<t; i++)
{
cin>>liczba;
licznik=0;
zero=0;
for(int j=0; j<liczba.length(); j++)
{
switch(liczba[j])
{
case '1':
{
if ((liczba.length()-j)%3==0)
cout<<"sto ";
else if ((liczba.length()-j)%3==2)
{
switch(liczba[j+1])
{
case '1':
cout<<"jedenascie ";
break;
case '2':
cout<<"dwanascie ";
break;
case '3':
cout<<"trzynascie ";
break;
case '4':
cout<<"czternascie ";
break;
case '5':
cout<<"pietnascie ";
break;
case '6':
cout<<"szesnascie ";
break;
case '7':
cout<<"siedemnascie ";
break;
case '8':
cout<<"osiemnascie ";
break;
case '9':
cout<<"dziewietnascie ";
break;
case '0':
cout<<"dziesiec ";
break;
}
}
else
{
if(liczba[j-1]!='1')
cout<<"jeden ";
}
break;
}
case '2':
{
if ((liczba.length()-j)%3==0)
cout<<"dwiescie ";
else if ((liczba.length()-j)%3==2)
cout<<"dwadziescia ";
else
{
if(liczba[j-1]!='1')
cout<<"dwa ";
}
break;
}
case '3':
{
if ((liczba.length()-j)%3==0)
cout<<"trzysta ";
else if ((liczba.length()-j)%3==2)
cout<<"trzydziesci ";
else
{
if(liczba[j-1]!='1')
cout<<"trzy ";
}
break;
}
case '4':
{
if ((liczba.length()-j)%3==0)
cout<<"czterysta ";
else if ((liczba.length()-j)%3==2)
cout<<"czterdziesci ";
else
{
if(liczba[j-1]!='1')
cout<<"cztery ";
}
break;
}
case '5':
{
if ((liczba.length()-j)%3==0)
cout<<"piecset ";
else if ((liczba.length()-j)%3==2)
cout<<"piecdziesiat ";
else
{
if(liczba[j-1]!='1')
cout<<"piec ";
}
break;
}
case '6':
{
if ((liczba.length()-j)%3==0)
cout<<"szescset ";
else if ((liczba.length()-j)%3==2)
cout<<"szescdziesiat ";
else
{
if(liczba[j-1]!='1')
cout<<"szesc ";
}
break;
}
case '7':
{
if ((liczba.length()-j)%3==0)
cout<<"siedemset ";
else if ((liczba.length()-j)%3==2)
cout<<"siedemdziesiat ";
else
{
if(liczba[j-1]!='1')
cout<<"siedem ";
}
break;
}
case '8':
{
if ((liczba.length()-j)%3==0)
cout<<"osiemset ";
else if ((liczba.length()-j)%3==2)
cout<<"osiemdziesiat ";
else
{
if(liczba[j-1]!='1')
cout<<"osiem ";
}
break;
}
case '9':
{
if ((liczba.length()-j)%3==0)
cout<<"dziewiecset ";
else if ((liczba.length()-j)%3==2)
cout<<"dziewiecdziesiat ";
else
{
if(liczba[j-1]!='1')
cout<<"dziewiec ";
}
break;
}
}
if((liczba[j]!='0')||(licznik>0))
licznik++;
else
zero++;
if(((liczba.length()-j-1)%3==0)&&(licznik>0))
{
switch((liczba.length()-j-1)/3)
{
case 1:
cout<<"tys. ";
break;
case 2:
cout<<"mln. ";
break;
case 3:
cout<<"mld. ";
break;
case 4:
cout<<"bln. ";
break;
}
}
if(zero==liczba.length())
cout<<"zero ";
}
cout<<endl;
}
return 0;
}