Witam, SPOJ nie chce mi zaakceptować mojego rozwiązania zadania (http://pl.spoj.com/problems/BFN1/)ze znanego mi powodu, mianowicie. To podesłane niżej jest jego roboczą wersją, tzn. ma pomocnicze cout-y. Na początku mamy liczbę testów, pętle z każdym, wczytanie liczby, wyznaczenie jej cyfr, zapisanie liczby przestawionej - i tu jest ów problem. Dla liczb dwucyfrowych przestawiona liczba jest poprawna, lecz dla liczb 4-cyfrowych rząd jedności jest wyznaczany błędnie - o 1 mniej, choć przy błędnych cyfrach liczba jest obliczona poprawnie (tyle że jest zła, ze względu na złe wyznaczenie cyfr). Zaś dla liczb 3-cyfrowych cyfry wyznaczone są dobrze, ale szwankuje obliczenie liczby przestawionej (po to dodałem linie 45-47, żeby to zaobserwować). O liczbach 5+-cyfrowych nie wspomnę. Nie wiem dlaczego przy 3-cyfrowych, źle się sumuje- o 1 za mało (pierwsze "po zsumowaniu"), a dlaczego przy 4-cyfrowych, błędnie jest ostatnia cyfra wyznaczana - o 1 za mała. Prosiłbym o pomoc. (Dorobiłem też toporną wersję, bo w zadaniu jest, że liczba nie większa od 80 i większość (poza 79-dopisałem ręcznie) wtedy działa (z dopisanym wyniki są dobre), ale przekraczam czas - mniejsza o to). Chodzi mi o te wyniki za małe o 1. Proszę o pomoc.
#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;
int liczba, dlugosc, liczbap,k,t;
int main()
{
cout<<"ile testow: ";
cin>>t;
for(int z=0;z<t;z++)
{
cout<<"Podaj liczbe do sprawdzenia ("<<z+1<<". test): ";
cin>>liczba;
petla:
cout<<endl<<"Sprawdzamy liczbe: "<<liczba<<endl;
int liczba2=0;
liczbap=liczba;
dlugosc=(int)log10(liczba)+1;
system("PAUSE");
int cyfra[dlugosc];
for(int i=0; i<dlugosc; i++)
{
if(i>0) liczba=liczba-cyfra[i-1]*pow(10,dlugosc-i);
if(i==0) cyfra[i]=floor(liczba/pow(10,dlugosc- i-1));
else cyfra[i]=floor(liczba/pow(10,dlugosc- i-1));
cout<<i+1<<". cyfra: "<<cyfra[i]<<endl;
kp: ;
}
cout<<endl;
for(int i=0; i<dlugosc; i++)
{
cout<<endl<<i+1<<". rzad: "<<cyfra[dlugosc-i-1]*pow(10,dlugosc-i-1);
liczba2+=cyfra[dlugosc-i-1]*pow(10,dlugosc-i-1);
cout<<endl<<"Po zsumowaniu: "<<liczba2<<endl;
}
cout<<endl<<"Przestawiona liczba: "<<liczba2<<endl;
if (liczbap==liczba2)
{
cout<<"Liczba jest palindromem!!!"<<endl<<endl<<endl;
}
else
{
cout<<"Liczba nie jest palindromem"<<endl<<endl<<endl;
liczba=liczbap+liczba2;
goto petla;
}
}
return 0;
}