Błąd w programie liczącym palindomy

0

Cześć , mam problem z zadaniem:
Piotruś w klasie na lekcji matematyki bardzo się nudził i pani postanowiła dać mu dodatkowe zadanie do rozwiązania. Piotruś otrzymał kartkę, na której napisane były małe liczby. Piotruś ma za zadanie stwierdzić, czy dana liczba jest palindromem (tzn. czy czyta się ją tak samo od lewej do prawej strony, jak od prawej do lewej). Jeżeli nie, Piotruś powinien dodać do siebie wartość liczby czytanej od lewej do prawej oraz wartość liczby czytanej od prawej do lewej, sprawdzić, czy suma jest palindromem, i jeżeli nie -- kontynuować proces, aż otrzyma palindrom.

Przykładowo, mając daną liczbę 28, Piotruś stwierdzi, że nie jest ona palindromem i wykona dodawanie 28 + 82 = 110. Liczba 110 wciąż nie jest palindromem, zatem Piotruś wykona jeszcze dodawanie 110 + 011 = 110 + 11 = 121. Wynik tego dodawania jest już palindromem, więc obliczenia zostaną zakończone.

Twoim zadaniem jest napisać program, który dla każdej liczby rozważanej przez Piotrusia wypisze palindrom (wynik obliczeń Piotrusia), oraz liczbę dodawań prowadzących do wyniku.

Czemu nie działa kod:

#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int proces=0;
        int a;
        cin>>a;
        while(true)
        {
        int dlugosc;
      string napis= to_string(a);
        dlugosc=napis.length();
            int parametr;
            parametr=dlugosc;
            int x;
            x=parametr/2;
            for(int n=0;n<x;n++)
            {
                if(napis[n]==napis[parametr-n-1])
                {
                    dlugosc=dlugosc-2;
                }
                else break;
            }

                        if(dlugosc<=1)
                        {
                            cout<<a<<"   "<<proces<<endl;
                            break;
                        }
                        if(dlugosc >=2)
                    {
                    string napis1;
                    for(int d=0;d<parametr;d++)
                    {
                    napis1[d]=napis[parametr-1-d];
                    }

                    int nowa;
                    nowa = atoi(napis1.c_str());
                    a = a+nowa;
                    proces++;
                    }
            }
        }
    return 0;
}

Dziękuje za każdą pomoc !

0
int decReverse(int x) {
    int r = 0;
    while (x) {
        r = r * 10 + x % 10;
        x /= 10;
    }
    return r;
}

int findPalindrom(int x) {
    int y = decReverse(x);
    while(x != y) {
         x = x + y;
         y = decReverse(x);
    }
    return x;
}
0

Proszę bardzo :)

#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;

int odw(int n)
{
    int k=0;
    while(n>0)
    {
        k+=n%10;
        n/=10;
        k*=10;
    }
    return k/10;
}
bool czy_Pal(int n)
{
    int k=odw(n);
    if(k==n)return true;
    else return false;
}
int main()
{
    int n;
    cin>>n;
    int i=1;
    while(true)
    {
        if(czy_Pal(n)==true)
        {
            cout<<n<<" :"<<i;
            break;
        }
        else
        {
            n+=odw(n);
            i++;
        }
    }
    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1