witam, oczywiście tematem tego pytania będzie kolejny problem z kodem :)
mianowicie od jakiegoś czasu rozwiązuje zadania z serwisu SPOJ . Niestety ,rzadko się zdarza żebym je rozwiązał bez poważniejszych problemów . Tym razem utknąłem na zadaniu pt "Zabawne dodawanie Piotrusia" . tu jest link : http://pl.spoj.com/problems/BFN1/
Problem jest jest taki że dla niektórych liczb program poprawnie wyznacza palindrom i ilość operacji by go osiągnąć
a dla innych liczy jakieś nie "stworzone rzeczy ". zdążyłem zauważyć iż kiedy program wykonuje tylko jedno dodawanie to jest w porządku a dla większej ilości odwrócona liczba ma jakieś "śmieciowe wartości" .
Bardzo bym prosił o nie podawanie już naprawionego kodu ale o naprowadzenie na błąd .
Z góry dziękuje za pomoc i proszę o litość za danie spojlera (inaczej nie wiedział bym jak to zrobić) :)
a oto kod całego programu :
#include <iostream>
#include <sstream>
#include <iostream>
#include <string>
#include <conio.h> ///error dla eksperymentu gdzie jest blad
using namespace std;
string isConvert(int n) //konwersja z int do string
{
ostringstream convert;
convert << n;
string n_str = convert.str();
return n_str;
}
int isConvertToInt(string str) //konwersja ze string do int
{
int n;
istringstream iss(str);
iss >> n;
return n;
}
int main()
{
int t, n; //t - ilosc przypadkow , n - dana liczba
cin>>t;
for(int i=0; i<t; i++)
{
cin>>n; //wczytujemy liczbe
string n_str = isConvert(n); //mamy kopi tej zmiennej we string
bool palindrom = false; //warunek zakonczenia petli
int counter = 0; //licznik poczatkowo na zero
string n_str2; //odwrocona liczba w string
int _n; //odwrocona liczba ale jako int
do
{
if(n_str[0]==n_str[n_str.length()-1]) //jesli konie i poczatek liczby sa rowne to zakoncz iteracje...
{
palindrom = true; //dajac zmiennej bool wartosc true
}
else //jezeli ta liczba nie jest polindromem to...
{
for(int j=n_str.length()-1; j>=0; j--) //stwoz jej odwrocona wersje
{
n_str2.push_back(n_str[j]);
}
if(n_str2[0]=='0')//usun zero jezeli jest na poczatko udwruconej wersji (to nie działa)
{
n_str2.erase(0,1);
}
_n = isConvertToInt(n_str2); //konwertuje ja na int zecz jasna by byla gotowa do zsumowania z ta poprzednia
cout<<n<<"+"<<_n<<endl; ///error dodawanie zeby zobaczyc jak to przebiega i dalej nie mam pojecia co jest zle
getch(); ///error
n+=_n; //dodaj do n to droga liczbe (zsumuj je)
n_str = isConvert(n); //by string mial swaja nowa wersie jako juz zsumowane liczby dla nastepnej iteracji
counter++; //podaj ze musielismi wykonac kolejny krok
}
}
while(palindrom!=true); //warunek zakonczenia petli while
cout<<n<<" "<<counter<<endl; //wypisz polindrom i liczbe krokow by go uzyskac
}
return 0;
}