jednak sędzia ostatecznie odrzuca
To bardzo słaby opis problemu. Kod może zostać niezaliczony z wielu powodów - błędny output, przekroczony limit czasu czy np. błąd wykonania (w tym przypadku SIGSEGV). Mając taką informację zdecydowanie łatwiej rozwiązać problem.
Poprawna odpowiedź już padła, ale kod można lepiej napisać. Tablice właściwie nie są potrzebne.
if (odwrocony(liczba)==liczba)
return true;
else
return false;
To można zamienić na:
return odwrocony(liczba) == liczba;
Postaraj się lepiej nazywać zmienne i funkcje. Staraj się unikać jednoliterowych zmiennych (oczywiście jest kilka wyjątków).
Przykładowe inne rozwiązanie:
#include <iostream>
#include <utility>
int reverse(int num)
{
int reversed = 0;
while (num)
{
reversed = reversed * 10 + num % 10;
num /= 10;
}
return reversed;
}
bool is_palindrome(int num)
{
return reverse(num) == num;
}
std::pair<int, unsigned> funny_adding(int num)
{
unsigned count = 0;
for (; !is_palindrome(num); ++count) {
num += reverse(num);
}
return { num, count };
}
int main ()
{
unsigned tests;
std::cin >> tests;
while (tests--)
{
int number;
std::cin >> number;
auto result = funny_adding(number);
std::cout << result.first << " " << result.second << "\n";
}
}