Палиндром в С++

#include <iostream>
using namespace std;
int main(){
 int x, b;
    cin >> x >> b;
    unsigned int x1 = x;
    int W = 0;
    for (int i=x; i <= b; x++) {
        while (x1 > 0) {
            W = W * 10 + x1 % 10;
            x1 = x1 / 10;

        }
        if (W == x) { cout << "True" << endl; }
        else { x1 = x1 + W; }
    }
    system("pause");
    return 0;
}

Не могу понять в чем ошибка,кто может поправить.Вот суть задания:Рассмотрим некоторое натуральное число N. если оно не является палиндромом, то построим новое число, изменив порядок цифр в записи числа N на обратный и добавим это новое число до N. Если полученная сумма не является палиндромом, то повторим с ней описаны действия., Пока не получим палиндром. Проверить выполняется гипотеза Безу для чисел из промежутка [a, b] - Обратное число искать умеем

  • проверять или число является палиндромом тоже
  • Во внешнем цикле проходим по всем числам из промежутка [a, b] и проверяем выполняется гипотеза.

Ответы (1 шт):

Автор решения: Harry

Как я понимаю, нужно что-то типа

unsigned long long rev(unsigned long long n)
{
    unsigned long long m = 0;
    for(;n; n/=10) m = m*10+n%10;
    return m;
}

bool isPalindrome(unsigned long long n)
{
    if (n%10 == 0) return false;
    return rev(n) == n;
}

int main(int argc, char * argv[])
{
    unsigned long long a = 123, b = 201;
    for(int n = a; n <= b; ++n)
    {
        unsigned long long m = n;
        int count = 0;
        while(m < 1000000000000000000 && !isPalindrome(m))
        {
            m += rev(m);
            ++count;
        }
        if (m < 1000000000000000000)
            cout << "For " << n << " there are " << count << " steps needed\n";
        else
            cout << "For " << n << " there are too large numbers\n";
    }
}
→ Ссылка