«Перевернуть и сложить» (англ. Reverse-Then-Add) — название операции, выполняемой над числом. Суть заключается в сложении исходного десятичного числа с его перевёрнутой копией (числом, записанным с конца). Например, 56 + 65 = 121, 521 + 125 = 646.
Некоторые числа (в частности, все однозначные и двузначные числа) становятся палиндромами достаточно быстро — после нескольких применений операции, и поэтому не являются числами Лишрел. Около 80 % всех чисел, меньших 10000, разрешаются в палиндром в 4 или меньше шагов. Около 90 % — за 7 и меньше шагов.
Подробнее https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0_196
Мой вариант поиска чисел:
Исходный код на Си:
#include <stdio.h>
int perevert (int d)
{
int m,dd;
m=0;
dd=d;
while (dd>0)
{ m=(m*10)+dd%10;
dd/=10;
}
return m;
}
int main(void)
{
int n,y,kolvo;
long long unsigned x;
char ch;
kolvo=0;
printf("Введите начальное число\n");
scanf("%d",&n);
/*Бесконечный цикл*/
while (1) {
x=n;
kolvo=0;
printf("%lld\n",x);/*Выводим само число*/
while (x!=perevert(x)){x+=perevert(x); printf("+"); kolvo++;/*если х-не палиндром, складываем его с обратным ему и выводим "+"*/
if (kolvo>1000) {printf("\nЧисло %d - число Лишрел\n",n); goto metka;}/*Если мы это уже повторили более 1000 раз, дальше нет смысла продолжать, хотя на самом деле long long int уже загибается на десятых повторах*/
}
printf("\nПалиндром:%lld\n",x);/*Если мы нашли палиндром - выводим*/
metka: /*На случай числа Лишрел*/
n++;/*Берем след. число*/
scanf("%c",&ch); /*чтоб можно было проследить, читаем рандомный символ*/
}
}
|