В принципе, тут надо работать не с числами а с массивом разрядов (тем более вы и так сначала преобразуете число в массив разрядов, а потом обратно). От этого массива требуется только операция сложения, что достаточно просто.
Число 196 После 48150 шагов так и не преобразовалось в палиндром. sum имеет 20000 знаков, С остальными числами всё в порядке.
Числа 177 и 187 обрели свои настоящие палиндромы.
Добавлено через 1 час 10 минут
Код:
# include<iostream>
# include<math.h>
const int m=20000;
int sum[m],n;
int pere() {
int i,p, mas[m];
for (i=0; i<n; i++) {
mas[i]=sum[i];
}
p=0;
for(i=0;i<n;i++) {
sum[i]=(mas[i]+mas[n-1-i]+p)%10;
p=(mas[i]+mas[n-1-i]+p)/10;
}
if (p!=0)
{
sum[n]=p;
n=n+1;
}
return 0;
}
using namespace std;
int palin(){
int i,j;
for (j=n-1,i=0;i<j; i++,j--) {
if (sum[i] != sum[j]) return 0;
}
return 1;
}
int main() {
int ch,i,j;
for(ch=100; ch<=200; ch++) {
cout<<ch;
sum[0]=ch%10;
sum[1]=(ch%100)/10;
sum[2]=ch/100;
n=3;
if (palin()==1) cout<<" palindrom\n";
else {
i=0;
while ((palin()==0)&(n<m)) {
pere();
i++;
}
cout<<" ";
if (n>=m)
cout<<" ne_nashel ";
else
for (j=n-1;j>=0;j--)
cout<<sum[j];
cout<<" kol_shagov - "<<i<<endl;
}
}
}