Палиндром в С++
#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";
}
}