Показать сообщение отдельно
Старый 09.10.2010, 02:38      #13
zhekas
Пользователь
Пользователь Mozilla Firefox
 
Аватар для zhekas
По умолчанию

В принципе, тут надо работать не с числами а с массивом разрядов (тем более вы и так сначала преобразуете число в массив разрядов, а потом обратно). От этого массива требуется только операция сложения, что достаточно просто.

Число 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;
		}
	}
}
__________________
Gentoo user

Последний раз редактировалось zhekas; 09.10.2010 в 03:20.
zhekas вне форума Пол: Мужчина   Ответить с цитированием Вверх
Благодарности: 1
SoaT (15.10.2010)