Robie zadanie ze SPOJa (BFN1 - Zabawne Dodawanie Piotrusia). W skrócie należy podać liczbę np.49 i sprawdzić czy nie jest palindromem, jeśli nie dodać do niej liczbę z przestawionymi odwrotnie cyframi czyli 49+94 i sprawdzić, czy suma nie jest palindromem, jeśli nie to ponowić dodawanie dla sumy i tak w kółko aż się uzyska palindrom. Zrobiłem funkcje która dobrze działa ale zwraca do main'a 1 za każdym razem kiedy jest więcej niż jedno powtórzenie. Dla testu polecam wprowadzić liczba t=1 i n 79 albo 78 albo 75. Dla jednego powtórzenia działa, ale jak jest ich więcej to main dostaje zawsze 1. Wstawiłem kilka kontrolnych cout, żeby było łatwiej szukać, ale nie daje rady. Poniżej kod.
#include <iostream>
#include <sstream>
#include <string>
#include<cstdlib>
using namespace std;
funkcja(int n1)
{
stringstream ss;
string liczba1;
string liczba2;
string liczba3;
int dlugosc,n2,n3,licznik=0;
licznik++;
ss.str("");
ss<<n1<<endl;
liczba1=ss.str();
dlugosc=liczba1.length();
cout<<"dlugosc liczby1 "<<dlugosc<<endl;
for (int i=dlugosc-2; i>=0; i--)
{
liczba2=liczba2+liczba1[i];
}
n2= atoi(liczba2.c_str());
cout<<"N1 "<<n1<<endl;
cout<<"N2 "<<n2<<endl;
n3=n1+n2;
ss.str("");
ss<<n3<<endl;
liczba3=ss.str();
cout<<"liczba 3:"<<liczba3<<endl;
dlugosc=liczba3.length();
cout<<"dlugosc liczby 3 "<<dlugosc<<endl;
if(liczba3[dlugosc-2]==liczba3[0])
{
int wynik;
cout<<"liczba 3 "<<liczba3<<endl;
wynik= atoi(liczba3.c_str());
cout<<"wynik w funkcji "<<wynik<<endl;
return wynik;
}
else
{
n1= atoi(liczba3.c_str());
funkcja(n1);
}
}
int main()
{
int dlugosc,n1,n2,n3;
int t;
int *licznik;
do
{
cout << "podaj t:" << endl;
cin>>t;
}
while (t>80);
int n[t];
for (int i=0; i<t; i++)
do
{
cout<<"podaj n:"<<endl;
cin>>n[i];
}
while ((n[i]<1)||n[i]>80);
for (int j=0; j<t; j++)
if (((n[j])<10)||(n[j]%11==0))
{
cout<<n[j]<<" 0"<<endl;
}
else
{
cout<<"wynik w main "<<funkcja(n[j])<<endl;
}
return 0;
}