👤

Se consideră subprogramul pal, care primeşte prin intermediul primului parametru, a, un număr natural, cu minimum 2 cifre şi maximum 8 cifre, şi furnizează prin intermediul celui de-al doilea parametru, b, cel mai apropiat număr de valoarea lui a, care este palindrom. În cazul în care există 2 astfel de numere, subprogramul va returna numărul mai mic.
Exemplu: dacă a=16, atunci valoarea returnată este 11; dacă a=128, valoarea returnată este 121, iar dacă a=33, atunci se returnează 33.
Scrieţi definitia completă a subprogramului pal.


Răspuns :

bool este_palindrom(int n)

{

   int v[8] = {0};

   int i = n, k = 0;

   while(i)

   {

       v[k] = i % 10;

       i /= 10;

       k++;

   }

   i = 0;

   while(i <= k / 2)

   {

       if(v[i] != v[k - i - 1])

           return false;

       i++;

   }

   return true;

}

void pal(int a, int& b)

{

   int v[8] = {-1}, i;

   i = 0;

   while(true)

   {

       if(este_palindrom(a - i))

       {

           b = a - i;

           return;

       }

       else if(este_palindrom(a + i))

       {

           b = a + i;

           return;

       }

       i++;

   }

}